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