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

时间:2018-07-13 18:22:32

标签: swift rx-swift rx-cocoa

我有一个名为 commentField UITextField,我创建了一个Observable<Bool>,如下所示:

let isCommentFieldValid = self.commentField.rx.text.orEmpty.map({ !$0.isEmpty })

此观察值确定按钮是否已启用。 问题是,当我更改commentField的text属性时,如下所示:

self.commentField.text = ""

isCommentFieldValid 不会再次触发,因此按钮的状态不会更改。任何使用该UI的版本都可以使用:如果我通过键盘从字段中删除了所有文本,则 isCommentFieldValid 会更新,但是通过代码不会。

是否有不起作用的原因?

1 个答案:

答案 0 :(得分:6)

如果查看rx.text的基础实现,您会发现它依赖于以下UIControlEvents.allEditingEvents.valueChanged。在text上显式设置UITextField属性不会为这些事件发送操作,因此您的可观察对象不会更新。您可以尝试明确发送操作:

self.commentField.text = ""
self.commentField.sendActions(for: .valueChanged)