7

我正在实现一个聊天 UI,并使用 Reactive Cocoa 在用户键入时调整聊天气泡的大小。目前,我正在根据 textview 的rac_textSignal. 一切都很好 - 除了一点:当用户发送消息时,我以编程方式清除文本字段:

_inputTextView.text = @"";

...但文本视图rac_textSignal没有激活。我听说这是 ReactiveCocoa 的一个特性——但是构建它的正确方法是什么?我是否需要一个 NSString 来保存currentlyTypedString,并在该字符串更新时驱动 UI 更改?

4

3 回答 3

9

只需发送操作:

[self.inputTextView sendActionsForControlEvents:UIControlEventEditingChanged];

于 2015-03-03T12:32:40.420 回答
7

对,没错。

MVVM下,视图模型应该被认为是 UI 数据和事件的规范来源(这会带来很多重要的好处,比如更好的可测试性)。您将键入的内容存储NSString在视图模型上,然后将其绑定UI。

使用 MVC,您必须改用控制器或模型,但原理是一样的:将视图视为瞬态数据,并在其他地方做重要的事情。

于 2013-11-25T08:01:41.337 回答
0

以下是有效的解决方法:

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

感谢GitHub 上的 startupthekid。

于 2016-12-22T13:07:10.430 回答