zoukankan      html  css  js  c++  java
  • 关于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];
    

      

  • 相关阅读:
    Phone-reset
    解决ie8下h5元素兼容性的问题
    PC css_reset
    centos7 nginx@1.16.1
    centos 7
    IE兼容css3的圆角和阴影和渐变
    前端开发安全编码规范
    防抖和节流封装模块
    vue的简单实现
    vue中$forceUpdate的使用
  • 原文地址:https://www.cnblogs.com/thefeelingofsimple/p/5013723.html
Copyright © 2011-2022 走看看