如何手动执行 UITextField 编辑操作,使用 rx 观察到更改?

How to manually perform action for UITextField editing changed observed with rx?

我只是添加了两个可观察值:

    mainView.textField.rx.text.orEmpty.bind(to: viewModel.searchPhrase).disposed(by: bag)
    mainView.textField.rx.controlEvent(.editingChanged).asObservable().subscribe(onNext: { [weak self] in
       print("voilala")
    }).disposed(by: bag)

现在我想从代码中调用操作来执行订阅和绑定。可能吗?

简单:

view.textField.insertText("someText")

Reactive.text 是一个 ControlProperty,所以它既是 ObserverType 又是一个 ObservableType(至少在 RxSwift 5.0 中是这样)。

这意味着你可以绑定它。像您一样阅读:

mainView.textField.rx.text.orEmpty.bind(to: viewModel.searchPhrase).disposed(by: bag)

...或写成:

viewModel.searchPhrase.bind(to: mainView.textField.rx.text).disposed(by: bag)

编辑: 显然,您不必绑定即可编辑文本。您可以执行一次性更新:

mainView.textField.rx.text.onNext("someText")

正确答案是 "don't do that." 应该将导致您的 "voilala" 打印的任何触发器合并到源代码中,这样您就不需要将您的视图用作您的一部分型号。

如果您只是想测试一些输入,那么您可以触发一个控制事件,就像触发任何 UIControl 事件一样,sendAction(_:to:for:) 调用文本字段本身。