我正在构建一个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}}已更改(无论是以编程方式还是由用户更改)?
答案 0 :(得分:5)
答案取决于视图模型的text
和UITextView
s text
之间的绑定是否需要双向。一般来说,我们试图远离双向绑定,因为它们变得更难以推理。理想情况下,只有一个方向驱动数据。
所以在这种情况下,你会写一些类似的东西:
RAC(self.viewModel, text) = [RACSignal merge:@[
[self.textView rac_textSignal],
RACObserve(self.textView, text),
]];
通过这种方式,您可以直接了解UITextView
s text
属性的更改,以及来自用户输入的文本更改。