关闭

iOS开发ReactiveCocoa的使用

777人阅读 评论(0) 收藏 举报
分类:

监听代理方法

    NSNotificationCenter *notic=[NSNotificationCenter defaultCenter];
    [[notic rac_addObserverForName:UIKeyboardWillShowNotification
                            object:nil] subscribeNext:^(id x) {
        NSLog(@"键盘弹出");
    }];

监听消息通知

    [[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:)
                    fromProtocol:@protocol(UIAlertViewDelegate)]
                   subscribeNext:^(RACTuple * tuple) {
                       NSLog(@"%@",tuple.first);
                       NSLog(@"%@",tuple.second);
                   }];

监听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);

  

加入点击手势

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
    [tap.rac_gestureSignal subscribeNext:^(id x) {
        
    }];
    [self.view addGestureRecognizer:tap];


自定义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];

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2383次
    • 积分:88
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类