您的位置:首页 > Web前端 > React

ReactiveCocoa的举例

2015-09-11 19:58 501 查看
原帖:http://www.cocoachina.com/ios/20150123/10994.html

-(void)initUI
{
[self.txtUsername.rac_textSignal subscribeNext:^(id x) {
//NSLog(@"%@",x);
}];

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

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

RAC(self.txtUsername,backgroundColor)=[validUsernameSignal map:^id(NSNumber *usernameValid) {
return [usernameValid boolValue]?[UIColor clearColor]:[UIColor yellowColor];
}];

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

RACSignal *signUpActiveSignal=[RACSignal combineLatest:@[validUsernameSignal,validPasswordSignal] reduce:^id(NSNumber *usernameValid,NSNumber *passwordValid){
return @([usernameValid boolValue]&&[passwordValid boolValue]);
}];

[signUpActiveSignal subscribeNext:^(NSNumber *signupActive) {
if ([signupActive boolValue]) {
self.btnLogin.enabled=YES;
[self.btnLogin setBackgroundColor:[UIColor redColor]];
}
else
{
self.btnLogin.enabled=NO;
[self.btnLogin setBackgroundColor:[UIColor whiteColor]];
}
}];

[[[[self.btnLogin rac_signalForControlEvents:UIControlEventTouchUpInside]
doNext:^(id x) {
self.btnLogin.enabled=NO;
} ]

flattenMap:^id(id value) {
return [self signInSignal];
}]
subscribeNext:^(NSNumber *signIn) {
self.btnLogin.enabled=YES;
BOOL success=[signIn boolValue];

if (success) {
[Common addAlertViewWithTitel:@"登陆成功"];
}
else
{
[Common addAlertViewWithTitel:@"失败"];
}
}] ;

}

-(RACSignal*)signInSignal
{
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[self signInWithUserName:self.txtUsername.text password:self.txtPassword.text complete:^(BOOL success) {
[subscriber sendNext:@(success)];
[subscriber sendCompleted];
}];
return nil;
}];
}

-(void)signInWithUserName:(NSString*)username password:(NSString*)password complete:(ReturnBack)completeBlock
{
dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, (int16_t)(NSEC_PER_SEC*2.0));
dispatch_after(time, dispatch_get_main_queue(), ^{
BOOL success=[username isEqualToString:@"user"]&&[password isEqualToString:@"password"];
completeBlock(success);
});
}

-(BOOL)isValidUsername:(NSString*)text
{
return text.length>3;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: