更改 UITextField 的文本不会触发 rx.text 活页夹

Changing the text of a UITextField does not trigger the rx.text binder

我有一个名为 commentFieldUITextField,我创建了一个 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)