我有一个名为 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)

10-08 07:43