更改 UITextField 的文本不会触发 rx.text 活页夹
Changing the text of a UITextField does not trigger the rx.text binder
我有一个名为 commentField 的 UITextField
,我创建了一个 Observable<Bool>
,如下所示:
let isCommentFieldValid = self.commentField.rx.text.orEmpty.map({ ![=11=].isEmpty })
此可观察对象确定按钮是否启用。
问题是当我更改 commentField
的文本 属性 喜欢这个:
self.commentField.text = ""
isCommentFieldValid 不会再次触发,因此按钮的状态不会改变。使用 UI 的任何版本都有效:如果我通过键盘从字段中删除所有文本,isCommentFieldValid 会更新,但通过代码不会。
为什么这不起作用?
如果您查看 rx.text
的底层实现,您会发现它依赖于以下 UIControlEvents
:.allEditingEvents
和 .valueChanged
。在 UITextField
上显式设置 text
属性 不会为这些事件发送操作,因此您的可观察对象不会更新。您可以尝试明确发送操作:
self.commentField.text = ""
self.commentField.sendActions(for: .valueChanged)
我有一个名为 commentField 的 UITextField
,我创建了一个 Observable<Bool>
,如下所示:
let isCommentFieldValid = self.commentField.rx.text.orEmpty.map({ ![=11=].isEmpty })
此可观察对象确定按钮是否启用。
问题是当我更改 commentField
的文本 属性 喜欢这个:
self.commentField.text = ""
isCommentFieldValid 不会再次触发,因此按钮的状态不会改变。使用 UI 的任何版本都有效:如果我通过键盘从字段中删除所有文本,isCommentFieldValid 会更新,但通过代码不会。
为什么这不起作用?
如果您查看 rx.text
的底层实现,您会发现它依赖于以下 UIControlEvents
:.allEditingEvents
和 .valueChanged
。在 UITextField
上显式设置 text
属性 不会为这些事件发送操作,因此您的可观察对象不会更新。您可以尝试明确发送操作:
self.commentField.text = ""
self.commentField.sendActions(for: .valueChanged)