如何订阅 iOS swift 中的 UITextView?

how to subscribe to a UITextView in iOS swift?

我对 IOS 开发和从事一个小项目相当陌生,我正在尝试使用 Rxswift 订阅 UITextView。但是,我似乎无法找到任何在线方式或按照我对 UITextField 所做的操作。

这是我为 TextField 所做的工作:

TextField.rx.controlEvent(.editingChanged).withLatestFrom(textField.rx.text.orEmpty)subscribe(onNext : { text in
        self.viewModel.address.accept(text)
Some code goes here

现在对 textView 做同样的事情

TextView.rx.controlEvent(.editingChanged).withLatestFrom(TextView.rx.text.orEmpty)subscribe(onNext : { text in
    self.viewModel.address.accept(text)

我收到以下错误: 在 'Reactive' 上引用实例方法 'controlEvent' 要求 'UITextView' 继承自 'UIControl'

我真的很困惑如何让 controlEvent 与 UITextField 一起工作。当我使用 rx 时,它没有显示在建议的代码中。

这比你的问题要简单得多...

func example(textView: UITextView, textField: UITextField, disposeBag: DisposeBag) {
    textView.rx.text
        .subscribe(onNext: { print([=10=]) })
        .disposed(by: disposeBag)
    textField.rx.text
        .subscribe(onNext: { print([=10=]) })
        .disposed(by: disposeBag)
}

而且您的订阅也可以简单得多:

func example(textView: UITextView, observer: PublishRelay<String>, disposeBag: DisposeBag) {
    textView.rx.text
        .orEmpty
        .bind(to: observer)
        .disposed(by: disposeBag)
}

但是,请记住:

Subjects [and Relays] provide a convenient way to poke around Rx, however they are not recommended for day to day use. An explanation is in the Usage Guidelines in the appendix. Instead of using subjects, favor the factory methods we will look at in Part 2. -- Intro to Rx

现在改掉将所有内容绑定到 Relay 或 Subject 的习惯,你会发现你在 Rx 中的未来更容易。