当前位置: 代码迷 >> Iphone >> 关于ReactiveCocoa的现实用法
  详细解决方案

关于ReactiveCocoa的现实用法

热度:137   发布时间:2016-04-25 05:27:50.0
关于ReactiveCocoa的实际用法

 

监听UITextView控件 text属性

    @weakify(self);    [self.textViewAdvice.rac_textSignal subscribeNext:^(NSString *content){        @strongify(self);        self.textFieldPlaceholder.hidden = (content && content.length > 0);    }];

  

监听UIButton控件 UIControlEventTouchUpInside事件

    @weakify(self)    [[self.buttonLogin      rac_signalForControlEvents:UIControlEventTouchUpInside]     subscribeNext:^(id x) {         @strongify(self)             [MBProgressHUD showHUDAddedTo:self.view                                  animated:NO];             [self.loginVM sendLogin];     }];

  

监听UITextField数值 赋值ViewModel

RAC(self.loginVM, username) = _textFieldAccount.rac_textSignal;

 

监听ViewModel数值 赋值UILabel

RAC(self.labelRoundNumber, text) = RACObserve(self.homePageVM, waitNum);

  

自定义RACSubject消息

@property (nonatomic, strong, readwrite) RACSubject *successLogin;@property (nonatomic, strong, readwrite) RACSubject *failureLogin;- (void)initialize {    _successLogin = [RACSubject subject];    _failureLogin = [RACSubject subject];}

  

消息RACSubject传递

- (void)sendLogin {    NSDictionary *dictParams = @{                                 @"UserName":self.username,                                 @"PassWord":self.password                                 };    @weakify(self);    [WebServiceManager requestLoginWithParams:dictParams                                     andBlock: ^(id data, id error) {                                         @strongify(self);                                         if (error) {                                             return;                                         }                                         if ([data isMemberOfClass:[UserModel class]]) {                                             [self.successLogin sendNext:userModel];                                         }                                         else {                                             [self.failureLogin sendNext:(NSString *)data];                                         }                                     }];}

  

消息RACSubject接收

    @weakify(self)    [self.loginVM.successLogin subscribeNext:^(UserModel *userModel) {        @strongify(self);        [UserModel userModel:userModel];        [HomePageVC rootViewController];        [MBProgressHUD hideHUDForView:self.view                             animated:YES];    }];        [self.loginVM.failureLogin subscribeNext:^(NSString *data) {        @strongify(self);        self.textFieldAccount.text = @"";        self.textFieldPassword.text = @"";        kMRCError(data);        [MBProgressHUD hideHUDForView:self.view                             animated:YES];    }];

  

监听键盘通知

    [[[NSNotificationCenter defaultCenter]      rac_addObserverForName:UIKeyboardWillShowNotification      object:nil]     subscribeNext:^(NSNotification *notification) {         NSDictionary *info = [notification userInfo];         NSValue *keyboardFrameValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];         CGRect keyboardFrame = [keyboardFrameValue CGRectValue];         CGFloat height_temp = 195 - (kViewHeight(self.view) - keyboardFrame.size.height - 90) / 2;         [_scrollViewMaster setContentOffset:CGPointMake(0, height_temp)                                    animated:YES];     }     ];        [[[NSNotificationCenter defaultCenter]      rac_addObserverForName:UIKeyboardWillHideNotification      object:nil]     subscribeNext:^(NSNotification *notification) {         [_scrollViewMaster setContentOffset:CGPointMake(0, 0)                                    animated:YES];     }     ];    [[NSNotificationCenter defaultCenter] removeObserver:self                                                    name:UIKeyboardWillShowNotification                                                  object:nil];    [[NSNotificationCenter defaultCenter] removeObserver:self                                                    name:UIKeyboardWillHideNotification                                                  object:nil];