你的位置:首页 > 操作系统

[操作系统]关于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];