26

我想观察财产UITextfield.editing。我正在使用这段代码:

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

但是在运行的过程中,只执行了一次。请问这个怎么解决

4

3 回答 3

53

不要观察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)
于 2016-09-22T08:06:54.263 回答
16

对于RXSwift 3.0

textField.rx.controlEvent([.editingDidBegin,.editingDidEnd])
        .asObservable()
        .subscribe(onNext: {
            print("editing state changed")
        }).disposed(by: disposeBag)
于 2017-05-11T09:02:09.617 回答
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)
于 2018-07-25T06:07:06.050 回答