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

      

  • 相关阅读:
    GDB+QEMU调试内核模块(实践篇)
    排序算法的python实现
    Linux命令行相关
    操作系统与网络
    计算机组成原理
    有了自己的技术博客
    if 和 if else
    十效率换算成十六进制
    <<左移 >>右移 >>>无符号右移 &与运算 |或运算 ^异或运算 ~反码
    // &与 // |或 // ^异或 // !非 // &&短路 // ||短路
  • 原文地址:https://www.cnblogs.com/thefeelingofsimple/p/5013723.html
Copyright © 2020-2023  润新知