ReactiveCocoa简介三,根据输入框的条件,改变输入框背景颜色

(1)创建一些信号,来表示用户名和密码输入框中的输入内容是否有效

//代码对每个输入框的rac_textSignal应用了一个map转换。输出是一个用NSNumber封装的布尔值。

RACSignal *validUsernameSignal =
 [self.usernameTextField.rac_textSignal
 map:^id(NSString *text) {
 return @([self isValidUsername:text]);
 }]; 
RACSignal *validPasswordSignal =
 [self.passwordTextField.rac_textSignal 
 map:^id(NSString *text) { 
 return @([self isValidPassword:text]);
 }];

(2)下一步是转换这些信号,从而能为输入框设置不同的背景颜色。

[[validPasswordSignal
  map:^id(NSNumber *passwordValid){
    return[passwordValid boolValue] ? [UIColor clearColor]:[UIColor yellowColor];
  }]
  subscribeNext:^(UIColor *color){
    self.passwordTextField.backgroundColor = color;
  }];

合并的写法就是
RAC宏允许直接把信号的输出应用到对象的属性上。
RAC(对象,属性名)每次信号产生一个next事件,传递过来的值都会应用到该属性上。
RAC(self.passwordTextField, backgroundColor) =
  [validPasswordSignal
    map:^id(NSNumber *passwordValid){
      return[passwordValid boolValue] ? [UIColor clearColor]:[UIColor yellowColor];
    }];
  
RAC(self.usernameTextField, backgroundColor) =
  [validUsernameSignal
    map:^id(NSNumber *passwordValid){
     return[passwordValid boolValue] ? [UIColor clearColor]:[UIColor yellowColor];
   }];

TextFieldValidPipeline.png

- (BOOL)isValidUsername:(NSString *)username {
  return username.length > 3;
}

- (BOOL)isValidPassword:(NSString *)password {
  return password.length > 3;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值