Изменение текста UITextField не вызывает связывание rx.text

У меня есть UITextField с именем commentField, и я создаю Observable<Bool> следующим образом:

let isCommentFieldValid = self.commentField.rx.text.orEmpty.map({ !$0.isEmpty })

Этот наблюдаемый определяет, включена кнопка или нет. Проблема в том, что когда я меняю текстовое свойство commentField понравилось это:

self.commentField.text = ""

isCommentFieldValid больше не срабатывает, и поэтому состояние кнопки не меняется. Работает любая версия, использующая пользовательский интерфейс: если я удаляю весь текст из поля с помощью клавиатуры, isCommentFieldValid обновляется, а с помощью кода — нет.

Есть ли причина, по которой это не работает?


person Kévin    schedule 13.07.2018    source источник


Ответы (1)


Если вы посмотрите на базовую реализацию rx.text, вы увидите, что она опирается на следующие UIControlEvents: .allEditingEvents и .valueChanged. Явная установка свойства text для UITextField не отправляет действия для этих событий, поэтому ваш наблюдаемый объект не обновляется. Вы можете попробовать отправить действие явно:

self.commentField.text = ""
self.commentField.sendActions(for: .valueChanged)
person daltonclaybrook    schedule 15.07.2018
comment
Спасибо за это. Для меня это сработало только тогда, когда я использовал .allEditingEvents. - person Rodrigo Guimarães; 19.06.2019