刚开始学习强大的ReativeCocoa库,对它的理解还是很浅,都是摸着石头过河。刚想结合项目,就碰到了一个问题。
ReactiveCocoa对textfield的操作。
根据网上的一些例子,学着去操作一次,
[RACObserve(self.nameText,text) subscribeNext: ^(NSString *newText){ NSLog(@"nameText:%@",newText); }]; [RACObserve(self.pwdText,text) subscribeNext: ^(NSString *newText){ NSLog(@"pwdText:%@",newText); }];
在虚拟机中,使用虚拟键盘敲入数据,结果只有在加载textfield时有log输出,而输入的数据完全没响应。于是又换了一种方式:
// TODO:using rac_textSignal [self.nameText.rac_textSignal subscribeNext:^(NSString *newText) { NSLog(@"nameText:%@",newText); }]; [self.pwdText.rac_textSignal subscribeNext:^(NSString *newText){ NSLog(@"pwdText:%@",newText); }];
只能监听self.nametext.text = @"";这样的赋值操作。而虚拟键盘的输入,是使用了UITextFieldDelegate的方式完成操作的。
两种方法,对比起来,当然是第二种方便好用。推荐第二种,如果要第一种的方式,还得研究研究如何替代UITextFieldDelegate 实现监听。
ReactiveCocoa 在对textfield扩展时就已经这么做到了。
- (RACSignal *)rac_textSignal { @weakify(self); return [[[[[RACSignal defer:^{ @strongify(self); return [RACSignal return:self]; }] concat:[self rac_signalForControlEvents:UIControlEventEditingChanged | UIControlEventEditingDidBegin]] map:^(UITextField *x) { return x.text; }] takeUntil:self.rac_willDeallocSignal] setNameWithFormat:@"%@ -rac_textSignal",[self rac_description]]; }
现在终于明白了,以后还是多看看源码。
附上使用ReactiveCocoa代替Delegate的一些做法 mark
http://spin.atomicobject.com/2014/02/03/objective-c-delegate-pattern/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。