首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ReactiveCocoa将UISwitch的状态绑定到模型

使用ReactiveCocoa将UISwitch的状态绑定到模型
EN

Stack Overflow用户
提问于 2014-03-07 06:18:40
回答 1查看 2.5K关注 0票数 5

我正在尝试使用ReactiveCocoa将UISwitch的on状态绑定到我的模型中的布尔属性。我从以下几点开始:

代码语言:javascript
复制
RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO);

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

所以我试着:

代码语言:javascript
复制
RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel];

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

代码语言:javascript
复制
self.switch.on = self.model.toggle;
RACChannelTo(self.model, toggle, @NO) = [self.switch rac_newOnChannel];

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

有没有更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

发布于 2014-03-07 23:49:56

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

要获得类似如下的行为:

代码语言:javascript
复制
RACChannelTo(self.switch, on, @NO) = RACChannelTo(self.model, toggle, @NO);

在开关以模型中的值开始的位置,您可以手动进行通道挂钩:

代码语言:javascript
复制
RACChannelTerminal *switchTerminal = [self.switch rac_newOnChannel];
RACChannelTerminal *modelTerminal = RACChannelTo(self.model, toggle, @NO);
[modelTerminal subscribe:switchTerminal];
[[switchTerminal skip:1] subscribe:modelTerminal];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22237326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档