Reactive Cocoa - 以编程方式设置文本时不会调用UITextView的rac_textSignal

时间:2013-11-25 07:43:19

标签: ios objective-c uitextfield reactive-cocoa

我正在实施聊天用户界面,并使用Reactive Cocoa根据用户类型调整聊天气泡的大小。目前,我正在根据textview rac_textSignal更新UI的布局。一切都很好 - 除了一点:当用户发送消息时,我以编程方式清除文本字段:

_inputTextView.text = @"";

...但textview的rac_textSignal未激活。 I hear this is a feature with ReactiveCocoa - 但建立这个的正确方法是什么?我是否需要拥有一个持有currentlyTypedString的NSString,并在该字符串更新时驱动UI更改?

3 个答案:

答案 0 :(得分:9)

发送动作:

  

[self.inputTextView   sendActionsForControlEvents:UIControlEventEditingChanged];

答案 1 :(得分:7)

是的,这是正确的。

MVVM下,视图模型应被视为UI数据和事件的规范来源(这会带来一系列重要的好处,例如更好的可测试性)。您将已键入的NSString存储在视图模型上,然后将 绑定到UI。

使用MVC,您必须使用控制器或模型,但原则是相同的:将视图视为瞬态数据并在其他地方执行重要操作。

答案 2 :(得分:0)

以下是一种有效的解决方法:

[[RACSignal 
  merge:@[self.inputTextView.rac_textSignal, RACObserve(self.inputTextView, text)]] 
  subscribeNext:^(NSString* text) {
      // do something here
  }];

Thanks to startupthekid在GitHub上。