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

浙公网安备 33010602011771号