Наблюдение за UITextField.editing с помощью RxSwift

Я хочу наблюдать за свойством UITextfield.editing. Я использую этот код:

self.money.rx_observe(Bool.self, "editing").subscribeNext { (value) in
    print("")
}.addDisposableTo(disposeBag)

Но в процессе работы он выполняется только один раз. Как мне решить эту проблему , пожалуйста


person C.liu    schedule 21.09.2016    source источник


Ответы (3)


Не соблюдайте свойство editing, потому что это не просто сохраненное свойство. Это определяется как:

public var editing: Bool { get }

Итак, вы не знаете, как UIKit на самом деле получает это значение.

Вместо этого используйте rx.controlEvent и укажите интересующие вас управляющие события, например:

textField.rx.controlEvent([.editingDidBegin, .editingDidEnd])
    .asObservable()
    .subscribe(onNext: { _ in
        print("editing state changed")
    })
    .disposed(by: disposeBag)
person solidcell    schedule 22.09.2016

Для RXSwift 3.0

textField.rx.controlEvent([.editingDidBegin,.editingDidEnd])
        .asObservable()
        .subscribe(onNext: {
            print("editing state changed")
        }).disposed(by: disposeBag)
person Chirag Desai    schedule 11.05.2017
comment
Но в этом случае нельзя отличить, какое именно событие произошло. Для Swift 4.x тоже работает. - person Ksenya; 21.12.2018
comment
Это набор опций, поэтому вы можете быть конкретными, например .rx.controlEvent(.editingDidEnd) - person Kwaku Eshun; 30.09.2019

Начиная с RxSwift 4.0, есть два конкретных управляющих события: textDidBeginEditing и textDidEndEditing.

Вы можете использовать это так:

textField.rx.textDidEndEditing
            .asObservable()
            .subscribe(onNext: {
                print("End of edition")
            }).disposed(by: disposeBag)


textField.rx.textDidBeginEditing
                .asObservable()
                .subscribe(onNext: {
                    print("Start of edition")
                }).disposed(by: disposeBag)
person Kevin ABRIOUX    schedule 25.07.2018
comment
это события UISearchBar, а не UITextField - person slxl; 16.07.2019
comment
да. Это для UISearchBar мероприятий. Спасибо. - person McDonal_11; 10.11.2019