关于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 @   wangzhipeng  阅读(5002)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示