【问题标题】:Binding a UISwitch's state to a model with ReactiveCocoa使用 ReactiveCocoa 将 UISwitch 的状态绑定到模型
【发布时间】:2014-03-06 22:18:40
【问题描述】:

我正在尝试使用 ReactiveCocoa 将 UISwitch 的开启状态绑定到我的模型中的布尔属性。我开始了:

RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO);

这就是我将其他视图绑定到模型的其他部分的方式,不幸的是它似乎对 UISwitch 没有任何作用。模型的状态不影响开关,反之亦然。

所以我尝试了:

RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel];

这似乎工作正常,但我必须事先手动设置开关的状态。所以,现在我有:

self.switch.on = self.model.toggle;
RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel];

同样,这可行,但与将 ReactiveCocoa 与其他控件一起使用相比,它似乎非常不雅。

难道没有更好的方法吗?

【问题讨论】:

    标签: ios iphone uikit reactive-cocoa


    【解决方案1】:

    您可以使用-rac_newOnChannel 而不是开关的on 的通道。这是因为 on 不能保证以符合 KVO 的方式进行修改。使用通道挂钩到交换机的UIControlEventValueChanged 事件。

    获得如下行为:

    RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO);
    

    如果开关以模型中的值开始,您可以手动进行通道连接:

    RACChannelTerminal *switchTerminal = [self.switch rac_newOnChannel];
    RACChannelTerminal *modelTerminal = RACChannelTo(self.model, toggle, @NO);
    [modelTerminal subscribe:switchTerminal];
    [[switchTerminal skip:1] subscribe:modelTerminal];
    

    【讨论】:

    • 有道理。如果可以清理一些就好了,但现在就可以了。谢谢!
    猜你喜欢
    • 2014-05-31
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多