ReactiveCocoa学习(一)

前端之家收集整理的这篇文章主要介绍了ReactiveCocoa学习(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、监听文本框值的改变

  1. UITextField *tfd=[[UITextField alloc]initWithFrame:CGRectMake(50,50,200,30)];
  2. tfd.borderStyle=UITextBorderStyleRoundedRect;
  3. tfd.placeholder=@"请输入您的姓名";
  4. tfd.font=[UIFont systemFontOfSize:14];
  5. [self.view addSubview:tfd];
  6. //监听文本框值的改变
  7. [tfd.rac_textSignal subscribeNext:^(id x) {
  8. //打印文本框输入的值
  9. NSLog(@"%@",x);
  10. }];

2、对文本框内容进行过滤,过滤掉长度小于3的内容

  1. //****************& 例一 &****************//
  2.  
  3. [[tfd.rac_textSignal filter:^BOOL(id value) {
  4. NSString *textvalue=value;
  5. return textvalue.length>3;
  6. }]
  7.  
  8. subscribeNext:^(id x) {
  9. NSLog(@"%@",x);
  10. }
  11. ];
  12. //或者写成这样
  13. //****************& 例二 &****************//
  14. RACSignal *tfdSingale=tfd.rac_textSignal;
  15. RACSignal *tfdSingfilter=[tfdSingale filter:^BOOL(id value) {
  16. NSString *textvalue=value;
  17. return textvalue.length>3;
  18. }];
  19. [tfdSingfilter subscribeNext:^(id x) {
  20. NSLog(@"%@",x);
  21. }];

3、 按文本长度过滤

  1. [[[tfd.rac_textSignal
  2. map:^id(id value) {
  3. NSString *textvalue=value;
  4. return @(textvalue.length);
  5. }]
  6. filter:^BOOL(id value) {
  7. NSInteger numvalue=[value integerValue];
  8. return (numvalue>3);
  9. }]
  10. subscribeNext:^(id x) {
  11. NSLog(@"%@",x);
  12. }];
  1. //判断是否是有效的值
  2. RACSignal *validUsernameSignal =
  3. [tfd.rac_textSignal
  4. map:^id(NSString *text) {
  5. return @([self isValidUsername:text]);
  6. }];
  7.  
  8. //打印结果
  9. [validUsernameSignal subscribeNext:^(id x) {
  10. NSLog(@"%@",x);
  11. }];

4、根据文本框的值改变文本框的背景图

  1. [[tfd.rac_textSignal
  2. map:^id(NSNumber *text) {
  3. return [text boolValue]?[UIColor clearColor]:[UIColor yellowColor];
  4. }]
  5. subscribeNext:^(UIColor * color) {
  6. tfd.backgroundColor=color;
  7. }];

利用ReactiveCocoa提供的宏设置

  1. RAC(tfd,backgroundColor)=[tfd.rac_textSignal map:^id(id value) {
  2. return [value boolValue]?[UIColor clearColor]:[UIColor yellowColor]
  3. ;
  4. }];

练习1。
根据用户名和密码判断按钮是否可用

  1. UITextField *tfd=[[UITextField alloc]initWithFrame:CGRectMake(50,30)];
  2. tfd.borderStyle=UITextBorderStyleRoundedRect;
  3. tfd.placeholder=@"请输入您的姓名";
  4. tfd.font=[UIFont systemFontOfSize:14];
  5. [self.view addSubview:tfd];
  6.  
  7. UITextField *tfd2=[[UITextField alloc]initWithFrame:CGRectMake(50,100,30)];
  8. tfd2.borderStyle=UITextBorderStyleRoundedRect;
  9. tfd2.placeholder=@"请输入您的密码";
  10. tfd2.font=[UIFont systemFontOfSize:14];
  11. [self.view addSubview:tfd2];
  12.  
  13. UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(50,150,30)];
  14. [btn setTitle:@"点我啊" forState:UIControlStateNormal];
  15. [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  16. [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
  17. [self.view addSubview:btn];
  18.  
  19.  
  20. RACSignal *useSingle=[tfd.rac_textSignal map:^id(NSString * value) {
  21.  
  22. return @([self isValidUsername:value]);
  23. }];
  24.  
  25. RACSignal *pwdSingle=[tfd2.rac_textSignal map:^id(NSString * value) {
  26.  
  27. return @([self isValidPassword:value]);
  28. }];
  29.  
  30. RAC(tfd,backgroundColor)=[useSingle map:^id(id value) {
  31. return [value boolValue]?[UIColor clearColor]:[UIColor yellowColor]
  32. ;
  33. }];
  34.  
  35. RAC(tfd2,backgroundColor)=[pwdSingle map:^id(id value) {
  36. return [value boolValue]?[UIColor clearColor]:[UIColor yellowColor]
  37. ;
  38. }];
  39.  
  40. //把信号两个信号连接起来,判断按钮的状态
  41. RACSignal *btnsingle=[RACSignal combineLatest:@[useSingle,pwdSingle] reduce:^id(NSNumber *uservalid,NSNumber *pwdvalid){
  42. return @([uservalid boolValue]&&[pwdvalid boolValue]);
  43. }];
  44.  
  45. [btnsingle subscribeNext:^(id x) {
  46. btn.enabled=[x boolValue];
  47. btn.backgroundColor=[x boolValue]?[UIColor redColor]:[UIColor grayColor];
  48. }];

猜你在找的React相关文章