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 。