繁体   English   中英

为什么 RxCocoa 没有提供订阅 UILabel 的文本更改?

[英]Why RxCocoa didn't provide subscribe for UILabel's text change?

RxCocoa 提供订阅UITextFieldUITextView文本更改:

UITextField().rx.text.orEmpty.changed
    .subscribe { text in
        print(text)
    }
    .disposed(by: disposeBag)

UITextView().rx.text.changed.subscribe { t in
    print(t)
}.disposed(by: disposeBag)

UILabel不方便:

UILabel().rx.text.subscribe ...

为什么 rxcocoa 是为此而设计的?

本质上, text方法是 UIControl 的addTarget(:action:for:)方法的包装。 它将该方法变成了可观察的东西。

UILabel类型不是从UIControl派生的,因此没有addTarget(:action:for:)方法。 您不能将@IBAction 附加到普通@IBAction中的 UILabel,因此您也不能将 Rx ControlProperty 附加到 UILabel。

就像在 UIKit 中一样,您不需要观察 UILabel 的更改,因为它更改的唯一方法是您的代码更改了它。 只需观察触发 label 发生变化的事情。


如果您查看代码将有助于理解... text方法只是value方法的重命名:

public var text: ControlProperty<String?> {
    value
}

value方法是一个监控“默认事件”的 ControlProperty。

    public var value: ControlProperty<String?> {
        return base.rx.controlPropertyWithDefaultEvents(

查看controlPropertyWithDefaultEvents ,我们可以找出默认事件是什么:

internal func controlPropertyWithDefaultEvents<T>(
    editingEvents: UIControl.Event = [.allEditingEvents, .valueChanged],
    getter: @escaping (Base) -> T,
    setter: @escaping (Base, T) -> Void
    ) -> ControlProperty<T>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM