【问题标题】:How to bind Signal<Bool, NoError> to enabled property of UIButton in Reactive Cocoa 4如何将 Signal<Bool, NoError> 绑定到 Reactive Cocoa 4 中 UIButton 的启用属性
【发布时间】:2015-12-09 20:30:45
【问题描述】:

我有一个非常简单的ReactiveCocoa 用例。在我的设置中,我有两个UITextFields 和一个UIButton

按钮的enabled 属性只能设置为true,前提是两个文本字段都至少包含一个字符。

我开始创建一个Signal&lt;Bool, NoError&gt;,根据上述条件发出truefalse

现在,据我了解,我需要以某种方式将信号(或其值)绑定到按钮的enabled 属性。但我不知道如何做到这一点,一个多小时的研究也没有产生任何结果......

更新: 据我了解,这以前可以使用RAC 宏:RAC(self.button, enabled) = signal; 或类似的东西来实现。但这对我没有帮助,因为宏在 RAC 3 中已被弃用。我的问题与 this one 基本相同,仅适用于 RAC 4 而不是 3。

【问题讨论】:

    标签: ios swift reactive-cocoa


    【解决方案1】:

    这可以使用自定义&lt;~ 运算符来实现。但是,它只适用于 MutableProperty 类型的属性,所以我们不能只做以下事情:

    let signal: <Bool, NoError> = ...
    button.enabled <~ signal
    

    相反,我们需要将按钮的 enabled 属性包装在 MutableProperty 中,如下所示:

    extension UIButton {
        public var rac_enabled: MutableProperty<Bool> {
            return lazyMutableProperty(self, key: &AssociationKey.text, setter: { self.enabled = $0 }, getter: { self.enabled })
        }
    }
    

    请注意,此实现依赖于由 Colin Eberhardt 创建的 gist

    现在我们可以这样做了:

    button.rac_enabled <~ signal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2013-11-29
      • 2011-07-06
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2020-12-01
      相关资源
      最近更新 更多