rac关于textFeild的录入
button需要两个textFeild的输入才能激活
RAC(self.viewModel, expressNumber) =self.expressNumberTextField.rac_textSignal;//手动设置了UITextField的textself.expressNumberTextField.text =@"10937374783";
//结果self.viewModel.expressNumber没有变化,还是原来值
@weakify(self);
[[RACSignalmerge:@[self.expressNumberTextField.rac_textSignal, RACObserve(self.expressNumberTextField, text)]]subscribeNext:^(NSString* text){ @strongify(self);self.viewModel.expressNumber = text; }];
RAC(self.submitBtn, enabled) = [RACSignal combineLatest:@[RACObserve(self.nameTextField, text),RACObserve(self.numberTextField, text),RACObserve(self.faceView.IDView, image),RACObserve(self.nationView.IDView, image)] reduce:^id(NSString*username,NSString*passwordNumber){
return@(username.length>=1&& (passwordNumber.length==15|| passwordNumber.length==18)&&self.faceView.IDView.image&&self.nationView.IDView.image);
}];
后来发现这样的话如果点击textFeild的时候是不会经过这个判断的,这样是不符合要求的。
后来经过与上面的代码的融合。
``` javascript
[[RACSignal merge:@[self.nameTextField.rac_textSignal,RACObserve(self.nameTextField, text)]]subscribeNext:^(NSString* text){
weakRef.viewModel.IDCardName= text;
}];
[[RACSignal merge:@[self.numberTextField.rac_textSignal,RACObserve(self.numberTextField, text)]]subscribeNext:^(NSString* text){
weakRef.viewModel.IDCardNumber= text;
}];
RAC(self.submitBtn, enabled) = [RACSignal
combineLatest:@[RACObserve(self.viewModel, IDCardName),RACObserve(self.viewModel, IDCardNumber)]
reduce:^id(NSString*username,NSString*passwordNumber){
return@(username.length>=1&& (passwordNumber.length==15|| passwordNumber.length==18)&&self.faceView.IDView.image&&self.nationView.IDView.image);
}];
```
先说明RAC中merge与combineLatest的区别,可以说merge是“或”,而combine是“且”的的意思。merge是两个信号之中只要有一个以上的信号发出,就触发条件。而combine就是需要同时两个信号发出才能触发。