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