rac关于textFeild的录入

2019-05-27  本文已影响0人  FancyMF

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就是需要同时两个信号发出才能触发。

上一篇下一篇

猜你喜欢

热点阅读