如何将NSString绑定到Reactive Cocoa中的UITextView?

时间:2014-02-26 04:16:37

标签: ios nsstring uitextview reactive-cocoa

我正在构建一个iOS社交客户端,在“撰写”视图中,我有一个用户输入文本的UITextView。我想使用ReactiveCocoa将text的{​​{1}}绑定到数据模型的UITextView,以跟随MVVM。

但是,我遇到了几个问题,都与一件事有关:当NSString的文本以编程方式更改时,RACObserve块不会被调用。

(例如:我将文本更改为属性字符串以突出显示#hashtags,@ usernames等,但在以编程方式更改视图时,不会创建此属性字符串。)

my previous question on this topic中,我得到了一些有用的建议,我应该将textview绑定到模型 - 反之亦然 - 但我不清楚我应该如何使用当前版本的Reactive Cocoa。 sample code that I've managed to find调用现已弃用的API。

UITextView的{​​{1}}绑定到rac_textSignal(反之亦然)的恰当方法是什么,以便在{的内容可以可靠地调用代码块{1}}已更改(无论是以编程方式还是由用户更改)?

1 个答案:

答案 0 :(得分:5)

答案取决于视图模型的textUITextView s text之间的绑定是否需要双向。一般来说,我们试图远离双向绑定,因为它们变得更难以推理。理想情况下,只有一个方向驱动数据。

所以在这种情况下,你会写一些类似的东西:

RAC(self.viewModel, text) = [RACSignal merge:@[ 
                                [self.textView rac_textSignal], 
                                RACObserve(self.textView, text),
                            ]];

通过这种方式,您可以直接了解UITextView s text属性的更改,以及来自用户输入的文本更改。