And*_*loy 5 iphone uikit ios reactive-cocoa
我试图使用ReactiveCocoa将UISwitch的on状态绑定到我的模型中的布尔属性.我开始时:
RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO);
Run Code Online (Sandbox Code Playgroud)
这就是我将其他视图绑定到模型的其他部分的方式,遗憾的是它似乎没有为UISwitch做任何事情.模型的状态不会影响开关,反之亦然.
所以我尝试过:
RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel];
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但我必须事先手动设置开关的状态.所以,现在我有:
self.switch.on = self.model.toggle;
RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel];
Run Code Online (Sandbox Code Playgroud)
同样,这可行,但与使用ReactiveCocoa和其他控件相比,它似乎非常不优雅.
有没有更好的方法来做到这一点?
您可以准确地使用-rac_newOnChannel而不是交换机的通道on。这是因为on不能保证以符合 KVO 的方式进行修改。使用通道挂钩切换UIControlEventValueChanged事件。
要获得如下行为:
RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO);
Run Code Online (Sandbox Code Playgroud)
如果开关以模型中的值开始,您可以手动进行通道连接:
RACChannelTerminal *switchTerminal = [self.switch rac_newOnChannel];
RACChannelTerminal *modelTerminal = RACChannelTo(self.model, toggle, @NO);
[modelTerminal subscribe:switchTerminal];
[[switchTerminal skip:1] subscribe:modelTerminal];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2515 次 |
| 最近记录: |