Reactive Cocoa – 当以编程方式设置文本时,UITextView的rac_textSignal不会被调用
我正在实现一个聊天界面,并且使用Reactive Cocoa来根据用户的types来调整聊天泡泡的大小。 目前,我正在基于textview的rac_textSignal
更新UI的布局。 一切都很好 – 除了一点:当用户发送消息,我编程清除文本字段:
_inputTextView.text = @"";
…但textview的rac_textSignal
不激活。 我听说这是ReactiveCocoa的一个特性 – 但是build立这个的正确方法是什么? 我需要有一个NSString持有的currentTypedString,并驱动UI更改时,该string更新?
是的,这是正确的。
在MVVM下 , 视图模型应该被认为是UI数据和事件的标准来源(这导致了很多重要的好处,比如更好的可testing性)。 你可以将types化的NSString
存储在视图模型上,然后将其绑定到UI。
使用MVC,您必须使用控制器或模型,但原理是一样的:将视图视为暂时数据,并在其他地方执行重要的事情。
只要发送行动:
[self.inputTextView sendActionsForControlEvents:UIControlEventEditingChanged];
以下是可行的解决方法:
[[RACSignal merge:@[self.inputTextView.rac_textSignal, RACObserve(self.inputTextView, text)]] subscribeNext:^(NSString* text) { // do something here }];
感谢 GitHub上的startupthekid 。