我想观察房产
UITextfield.editing
。我正在使用这个代码:
self.money.rx_observe(Bool.self, "editing").subscribeNext { (value) in
print("")
}.addDisposableTo(disposeBag)
但在运行过程中,只执行一次。请问如何解决这个问题
不要观察
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)
对于RXSwift 3.0
textField.rx.controlEvent([.editingDidBegin,.editingDidEnd])
.asObservable()
.subscribe(onNext: {
print("editing state changed")
}).disposed(by: disposeBag)
从 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)
使用最新的 Rxswift,您可以将其用作:
yourTextField
.rx
.controlEvent(.editingDidEnd) // you can also use other controlEvents
.withLatestFrom(yourTextField.rx.text)
.observe(on: MainScheduler.instance)
.subscribe { [weak self] text in
guard let self = self else { return }
print("when editing didEnd, my text is \(text)"
}
.disposed(by: disposeBag)
通过使用 .withLatestFrom,您还可以获得根据您定义的 controlEvent 编写的时间文本。