关于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];

  

 

posted @ 2015-12-02 17:52  wangzhipeng  阅读(5002)  评论(1编辑  收藏  举报