как подписаться на UITextView в iOS swift?

#ios #swift #uitextview #rx-swift #uitextviewdelegate

Вопрос:

Я довольно новичок в разработке IOS и работаю над небольшим проектом, я пытаюсь подписаться на UITextView с помощью Rxswift. Однако я, похоже, не могу найти способ сделать это онлайн или следуя тому, что я сделал с 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.rx.controlEvent(.editingChanged).withLatestFrom(TextView.rx.text.orEmpty)subscribe(onNext : { text in
    self.viewModel.address.accept(text)
 

Я получаю следующую ошибку:
Ссылка на метод экземпляра «controlEvent» в «Реактивном» требует, чтобы «UITextView» наследовался от «UIControl»

Я действительно запутался в том, как заставить controlEvent работать с UITextField. это не отображается в предлагаемом коде, когда я использую rx.

Ответ №1:

Это намного проще, чем то, что у вас есть в вашем вопросе…

 func example(textView: UITextView, textField: UITextField, disposeBag: DisposeBag) {
    textView.rx.text
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
    textField.rx.text
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}
 

И ваша подписка также может быть намного проще:

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

Однако имейте в виду:

Предметы [и реле] обеспечивают удобный способ поиска Rx, однако они не рекомендуются для повседневного использования. Объяснение содержится в Руководстве по использованию в приложении. Вместо того, чтобы использовать темы, отдавайте предпочтение заводским методам, которые мы рассмотрим в части 2. — Введение в Rx

Откажитесь от привычки привязывать все к Ретранслятору или Предмету прямо сейчас, и вы обнаружите, что ваше будущее в Rx намного проще.

Комментарии:

1. Спасибо!!! спасатель жизни!! это делает все очень ясным. Я проверю рекомендации по использованию, чтобы получить более четкое представление о том, как лучше всего его использовать.