2014-03-06 3 views
5

ReactiveCocoa를 사용하여 UISwitch의 온 상태를 내 모델의 부울 속성에 바인딩하려고합니다.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를 사용하는 것에 비해 매우 우아 보인다 : 그래서, 지금은 있습니다.

더 좋은 방법은 없나요?

답변

4

스위치의 on 채널 대신 -rac_newOnChannel을 사용해야합니다. 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]; 
+0

는 의미가 있습니다. 그것이 약간 정리 될 수 있으면 좋을 것이나, 지금 당장 할 것이다. 감사! –

관련 문제