标签:
1:登录验证 #import <Foundation/Foundation.h> typedef void (^SignInRespose) (BOOL result); @interface TJSignInRespose : NSObject + (void)signInWithUsername:(NSString *)username password:(NSString *)password complete:(SignInRespose)completeBlock; @end #import "TJSignInRespose.h" @implementation TJSignInRespose + (void)signInWithUsername:(NSString *)username password:(NSString *)password complete:(SignInRespose)completeBlock { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ BOOL result = [username isEqualToString:@"user"] && [password isEqualToString:@"password"]; completeBlock(result); }); } @end
2具体实现 #import "ReactiveCocoa.h" #import "ViewController.h" #import "TJSignInRespose.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextField *textFieldUserName; @property (weak, nonatomic) IBOutlet UITextField *textFieldPwd; @property (weak, nonatomic) IBOutlet UILabel *lblRemind; @property (weak, nonatomic) IBOutlet UIButton *btnSign; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; /**添加验证用户名信号*/ RACSignal *userNameSignal = [self.textFieldUserName.rac_textSignal map:^id(NSString *userName) { return @([self isValidateUserName:userName]); }]; /**添加验证用户密码信号*/ RACSignal *userPwdSingal = [self.textFieldPwd.rac_textSignal map:^id(NSString *userPwd) { return @([self isValidateUserPwd:userPwd]); }]; /**设置用户名文本框背景颜色*/ RAC(self.textFieldUserName,backgroundColor) = [userNameSignal map:^id(NSNumber *userName) { return [userName boolValue]?[UIColor clearColor]:[UIColor yellowColor]; }]; /**设置密码文本框背景颜色*/ RAC(self.textFieldPwd,backgroundColor) = [userPwdSingal map:^id(NSNumber *userPwd) { return [userPwd boolValue]?[UIColor clearColor]:[UIColor yellowColor]; }]; /**判断登录按钮是否可用*/ RAC(self.btnSign,enabled) = [RACSignal combineLatest:@[userPwdSingal,userNameSignal ] reduce:^id(NSNumber *userName,NSNumber *userPwd){ return @([userName boolValue]&&[userPwd boolValue]); }]; /**为登录按钮添加事件*/ [[[self.btnSign rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^RACStream *(id value) { return [self signInSignal]; }] subscribeNext:^(id value) { BOOL result = [value boolValue]; self.lblRemind.text = result?@"登录成功":@"登录失败"; }]; RAC(self.lblRemind,text) = [RACSignal combineLatest:@[userNameSignal,userPwdSingal] reduce:^id(NSNumber *userName,NSNumber *userPwd){ BOOL result = [userName boolValue]&&[userPwd boolValue]; return result?@"":@"请输入密码或者用户名"; }]; } - (BOOL)isValidateUserName:(NSString *)userName { return userName.length>3; } - (BOOL)isValidateUserPwd:(NSString *)userPwd { return userPwd.length>3; } /** * 登录认证 * * @return 实现RACSubscriber协议的subscriber(订阅者) */ - (RACSignal *)signInSignal { return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [TJSignInRespose signInWithUsername:self.textFieldUserName.text password:self.textFieldPwd.text complete:^(BOOL result) { /**把登录结果传递给下一个管道*/ [subscriber sendNext:@(result)]; [subscriber sendCompleted]; }]; return nil; }]; } @end
标签:
原文地址:http://www.cnblogs.com/thbbsky/p/4550961.html