web-dev-qa-db-fra.com

Observer UITextField.editing avec RxSwift

Je souhaite observer la propriété UITextfield.editing. J'utilise ce code:

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

Mais en cours d'exécution, il n'est exécuté qu'une seule fois. Comment résoudre ce problème , s'il vous plaît

15
C.liu

N'observez pas la propriété editing, car ce n'est pas seulement une propriété stockée. Il est défini comme:

public var editing: Bool { get }

Vous ne savez donc pas comment UIKit obtient réellement cette valeur.

Utilisez plutôt rx.controlEvent et spécifiez les événements de contrôle qui vous intéressent, comme ceci:

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

Pour RXSwift 3.

textField.rx.controlEvent([.editingDidBegin,.editingDidEnd])
        .asObservable()
        .subscribe(onNext: {
            print("editing state changed")
        }).disposed(by: disposeBag)
12
Chirag Desai

Depuis RxSwift 4.0, il existe deux événements de contrôle spécifiques: textDidBeginEditing et textDidEndEditing

Vous pouvez l'utiliser comme ceci:

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)
0
Kevin ABRIOUX