我有一个名为 commentField 的 UITextField
,我创建了一个这样的 Observable<Bool>
:
let isCommentFieldValid = self.commentField.rx.text.orEmpty.map({ !$0.isEmpty })
这个 observable 决定按钮是否被启用。
问题是,当我更改
commentField
的 text 属性时,如下所示:self.commentField.text = ""
isCommentFieldValid 不会再次触发,因此按钮的状态不会改变。使用 UI 的任何版本都有效:如果我通过键盘从字段中删除所有文本, isCommentFieldValid 会更新,但通过代码则不会。
有没有理由这不起作用?
最佳答案
如果您查看 rx.text
的底层实现,您会发现它依赖于以下 UIControlEvents
: .allEditingEvents
和 .valueChanged
。在text
上显式设置UITextField
属性不会为这些事件发送 Action ,因此您的可观察对象不会更新。您可以尝试明确发送一个 Action :
self.commentField.text = ""
self.commentField.sendActions(for: .valueChanged)