本文首发地址
只要最实用的,不用刨根问底
先说使用ReactiveCocoa对UITextFiled的基本用法。咱下一篇讲讲对UIButton的用法
网上关于这个ReactiveCocoa有好多Blog,有多灵活有多好用。似乎都没有完全的让我们去使用的文章。今天就带大家看看怎么使用。这个ReactiveCocoa对于业界推崇无限高大上的第三方的框架。包括美团,蘑菇街等等app的开发负责人都对他赞不决口。都说大型app都适合用他来做开发。可以基于他的MVVM思想,和信号源的开发。看着外界对他说的神乎其神的,其实也不比羡慕。给我一块学习,
其实看这里也就够用了。
用:CocoaPods导入工程
NOTICE:一定要在你的Podfile的文件里要这样写
use_frameworks!
pod 'ReactiveCocoa', '~> 4.2.1'
[use_frameworks!]一定要写上!!!
1:监听UITextFiled的输入内容
[self.userNameFiled.rac_textSignal subscribeNext:^(id x) {
NSLog(@"----%@",x);
}];
1.1 监听UITextFiled输入的字符串的长度开始Action
/**监听输入N个字符以后的动作*/
[[self.userNameFiled.rac_textSignal filter:^BOOL(NSString * value) {
return value.length > 6;
}] subscribeNext:^(NSString * value) {
NSLog(@"----%@",value);
}];
// 这样写不好啊
[[self.userNameFiled.rac_textSignal map:^id(NSString * value) {
return value.length > 6 ? value : @"";
}] subscribeNext:^(NSString * value) {
NSLog(@"----%@",value);
}];
2:监听文本输入框的内容控制UIButton的属性
RACSignal * updateTextSignal = [self.userNameFiled.rac_textSignal map:^id(NSString * value) {
NSLog(@"----length%ld",value.length);
return (value.length <= 3)? @(NO):@(YES);
}];
RAC(self.submitButton,enabled) = updateTextSignal;
// 也可以这样写
[updateTextSignal subscribeNext:^(NSNumber * value) {
self.submitButton.enabled = [value boolValue];
}];
3:监听文本输入框的内容控制UITextFiled的背景颜色
RACSignal * updateTextSignal = [self.userNameFiled.rac_textSignal map:^id(NSString * value) {
NSLog(@"----length%ld",value.length);
return (value.length <= 3)? [UIColor clearColor]:[UIColor redColor];
}];
RAC(self.userNameFiled,backgroundColor) = updateTextSignal;
/**还可以这样写*/
[updateTextSignal subscribeNext:^(id x) {
self.userNameFiled.backgroundColor = x;
}];
4:监听多个信号源,控制登陆的UIButton的enabled属性
将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号
/**监听多个输入文本框,同时控制控件属性*/
RACSignal * fallInSignal = [RACSignal combineLatest:@[
self.userNameFiled.rac_textSignal,
self.userPwdFiled.rac_textSignal
] reduce:^(NSString * userName,NSString * pwd) {
return @(userName.length > 0 && pwd.length > 0);
}];
RAC(self.submitButton,enabled) = fallInSignal;
总结:
大家注意在每一个UITextfile的都有一个方法rac_textSignal。利用延展,创建了对UITextfiled的信号。在上面的演示方法中,我们看了有几个函数。
1: fileter
2: map
3: subscribeNext
4: RAC(宏)
5:combineLatest
6:reduce
[map]
监听文本框的内容改变,把结构重新映射成一个新值.
使用步骤:
1.传入一个block,类型是返回对象,参数是value
2.value就是源信号的内容,直接拿到源信号的内容做处理
3.把处理好的内容,直接返回就好了,不用包装成信号,返回的值,就是映射的值。
[combineLatest]
将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。
[reduce]
用于信号发出的内容是元组,把信号发出元组的值聚合成一个值
[filter]
过滤信号,使用它可以获取满足条件的信号.
如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号
更多消息
更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送: