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

      

  • 相关阅读:
    hdu 5365 Run(BC 50 B题)(求四边形的个数)
    浏览器网页推断手机是否安装IOS/Androidclient程序
    外包项目总结
    HDOJ 1534 Schedule Problem 差分约束
    JavaScript入门:003—JS中的变量
    关于产品的一些思考——(三十九)瀑布流载入
    从头认识java-15.7 Map(4)-介绍HashMap的工作原理-hash碰撞(常常作为面试题)
    CodeForce 424C Magic Formulas
    HDU 3400 Line belt (三分再三分)
    oracle跨数据库跨用户訪问注意事项
  • 原文地址:https://www.cnblogs.com/thefeelingofsimple/p/5013723.html
Copyright © 2011-2022 走看看