#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. Спасибо!!! спасатель жизни!! это делает все очень ясным. Я проверю рекомендации по использованию, чтобы получить более четкое представление о том, как лучше всего его использовать.