Наблюдение UITextField.rx.text не получает уведомления о программных c изменениях значения текстового поля - PullRequest
0 голосов
/ 28 января 2020

Наблюдение текстового значения UITextfield с помощью RxSwift, как в примере кода ниже, не обновляется при программной установке значения текстового поля следующим образом customTextField.text = "Hello World"

customTextField.rx.text
            .bind(onNext: { textValue in
                print( textValue )
            }).disposed(by: disposeBag)

Я понял, что это связано с установкой значения программно не запускает событие свойства элемента управления valueChanged.

Как бы я go убедился, что событие valueChanged запускается при программной установке значения?

1 Ответ

0 голосов
/ 28 января 2020

Я нашел решение (это взлом) моего вопроса.

Переопределите текстовое свойство UITextField и добавьте didSet(), а затем форсируйте отправку события, например sendActions(for: .valueChanged).

Таким образом, следующее сработало для меня

private class CustomTextField: UITextField {
    override var text: String? {
        didSet {
           sendActions(for: .valueChanged)
        }
    }
}

...

customTextField.rx.text
            .bind(onNext: { textValue in
                print( textValue )
            }).disposed(by: disposeBag)

...

customTextField.text = "Hello World" 

Следующее приведет к тому, что Hello World будет распечатано, как и ожидалось, поэтому свойство valueChanged было запущено, когда значение customTextField было установить программно.

У кого-нибудь есть лучшее решение? Получил вдохновение от: { ссылка } и https://github.com/ReactiveX/RxSwift/issues/551

...