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