更改 UITextField 的文本不会触发 rx.text 活页夹
Posted
技术标签:
【中文标题】更改 UITextField 的文本不会触发 rx.text 活页夹【英文标题】:Changing the text of a UITextField does not trigger the rx.text binder 【发布时间】:2018-07-13 18:22:31 【问题描述】:我有一个名为 commentField 的 UITextField
,我创建了一个 Observable<Bool>
,如下所示:
let isCommentFieldValid = self.commentField.rx.text.orEmpty.map( !$0.isEmpty )
这个 observable 决定一个按钮是否被启用。
问题是当我更改 commentField
的 text 属性时喜欢这样:
self.commentField.text = ""
isCommentFieldValid 不会再次触发,因此按钮的状态不会改变。使用 UI 的任何版本都有效:如果我通过键盘从字段中删除所有文本,isCommentFieldValid 会更新,但通过代码不会更新。
这不起作用有什么原因吗?
【问题讨论】:
【参考方案1】:如果您查看rx.text
的底层实现,您会发现它依赖于以下UIControlEvents
:.allEditingEvents
和.valueChanged
。在 UITextField
上显式设置 text
属性不会发送这些事件的操作,因此您的 observable 不会更新。您可以尝试显式发送操作:
self.commentField.text = ""
self.commentField.sendActions(for: .valueChanged)
【讨论】:
谢谢。对我来说,它只有在我使用.allEditingEvents
时才有效。以上是关于更改 UITextField 的文本不会触发 rx.text 活页夹的主要内容,如果未能解决你的问题,请参考以下文章
使用 UITextfield 的 setText 时不会触发 UIControlEventEditingChanged
使用 UITextfield 的 setText 时不会触发 UIControlEventEditingChanged