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;
}
-(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;
}
相关文章推荐
- React 编码
- Python中reactor,factory,protocol
- [React] Intro to inline styles in React components
- ReactJS State
- ReactJS Properties 简介
- ReactiveX--响应式编程
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- React.js的核心入门知识
- ReactiveCocoa入门教程:第一部分
- 【JAVASCRIPT】React学习- 数据流(组件通信)
- ReactiveCocoa 专题
- react-native试玩(33)-状态栏API
- react-native试玩(32)-推送通知API
- react-native试玩(31)-访问相册API
- "abc_shareactionprovider_share_with" is not translated in "he" (Hebrew), "zh" (Chinese)
- react-native试玩(30)-应用状态API
- react-native试玩(29)-应用注册API
- react-native试玩(28)-弹出框API
- react-native试玩(29)-React Native Playground