关于ReactiveCocoa的实际用法

 

监听UITextView控件 text属性

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

  

监听UIButton控件 UIControlEventTouchUpInside事件

1
2
3
4
5
6
7
8
9
@weakify(self)
[[self.buttonLogin
  rac_signalForControlEvents:UIControlEventTouchUpInside]
 subscribeNext:^(id x) {
     @strongify(self)
         [MBProgressHUD showHUDAddedTo:self.view
                              animated:NO];
         [self.loginVM sendLogin];
 }];

  

监听UITextField数值 赋值ViewModel

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

 

监听ViewModel数值 赋值UILabel

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

  

自定义RACSubject消息

1
2
3
4
5
6
7
@property (nonatomic, strong, readwrite) RACSubject *successLogin;
@property (nonatomic, strong, readwrite) RACSubject *failureLogin;
 
- (void)initialize {
    _successLogin = [RACSubject subject];
    _failureLogin = [RACSubject subject];
}

  

消息RACSubject传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- (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接收

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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];
}];

  

监听键盘通知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[[[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-17 18:36  Dawn_lin  阅读(124)  评论(0编辑  收藏  举报