Home Articles

使用RxSwift观察UITextField.editing

Asked
Viewed 625 times
12

我想观察属性 UITextfield.editing . 我正在使用此代码:

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

但是在运行过程中,它只执行一次 . 请问我该如何解决这个问题

3 Answers

  • 24

    对于 RXSwift 3.0

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

    不要观察 editing 属性,因为它定义为:'s not just a stored property. It':

    public var editing: Bool { get }
    

    所以你不知道UIKit实际上是如何获得这个 Value 的 .

    相反,使用 rx.controlEvent 并指定您感兴趣的控件事件,如下所示:

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

    从RxSwift 4.0开始,有两个特定的控制事件: textDidBeginEditingtextDidEndEditing

    你可以像这样使用它:

    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)
    

Related