初玩RAC
之前因为项目的原因以及ReactiveCocoa框架导入到项目老是报错的原因,导致我这边一直没有能好好的将ReactiveCocoa运行起来,最近看了Hank老师的视频,而且项目中我们使用的就是OC,因此还是决定使用ReactiveObjC来尝试一下RAC。
1、下面是写的Demo界面代码:
1 -(void)createUI 2 { 3 self.view.backgroundColor =[UIColor whiteColor]; 4 5 UIView * view = [UIView new]; 6 view.backgroundColor = [UIColor orangeColor]; 7 [self.view addSubview:view]; 8 9 _view =view; 10 11 [view mas_makeConstraints:^(MASConstraintMaker *make) { 12 make.left.top.mas_offset(10); 13 make.right.mas_offset(-10); 14 make.height.mas_equalTo(100); 15 16 }]; 17 18 UIButton * btn = [[UIButton alloc] init]; 19 _btn=btn; 20 btn.backgroundColor =[UIColor redColor]; 21 [view addSubview:btn]; 22 //注意的是当视图为空的时候,界面当然没有办法进行添加,然后自然就会崩溃了 23 [btn addTarget:_view action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside]; 24 [btn mas_makeConstraints:^(MASConstraintMaker *make) { 25 make.left.top.mas_offset(20); 26 make.right.mas_offset(-20); 27 make.height.mas_offset(60); 28 }]; 29 30 UIView * testGes = [UIView new]; 31 testGes.backgroundColor = [UIColor redColor]; 32 [self.view addSubview:testGes]; 33 [testGes mas_makeConstraints:^(MASConstraintMaker *make) { 34 make.top.mas_equalTo(_view.mas_bottom).offset(20); 35 make.left.mas_equalTo(self.view.mas_left).offset(20); 36 make.right.mas_equalTo(self.view.mas_right).offset(-20); 37 make.height.mas_equalTo(100); 38 }]; 39 40 #pragma 可以截取到 41 //1、使用手势也是可以获取到事件,可以截取到 42 UITapGestureRecognizer * ges = [[UITapGestureRecognizer alloc]init]; 43 [testGes addGestureRecognizer:ges]; 44 45 [[ges rac_gestureSignal]subscribeNext:^(__kindof UIGestureRecognizer * _Nullable x) { 46 NSLog(@"触发点击事件"); 47 }]; 48 49 50 }
2、RAC代码:
-(void)createRac { #pragma 能截取到 // 1、View首先不能为空,然后target上面可以添加到其他View上面 2、进行按钮事件点击事件监听,按钮是没有问题的 rac_signalForSelector [[_view rac_signalForSelector:@selector(btnAction)] subscribeNext:^(RACTuple * _Nullable x) { NSLog(@"监听按钮点击事件"); }]; #pragma 不能截取到 //1、使用本身的视图进行监听是没有办法截取到自身的点击事件rac_signalForSelector [[_btn rac_signalForSelector:@selector(btnAction)] subscribeNext:^(RACTuple * _Nullable x) { NSLog(@"按钮监听"); }]; #pragma 能截取到 //1、截取button的点击事件的话就直接使用rac_signalForControlEvents [[_btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) { NSLog(@"截取按钮点击事件"); }]; } -(void)btnAction { NSLog(@"按钮点击事件"); //1、可以截取到方法,则没有崩溃,现在若是没有截取到就会造成程序崩溃! }
【注】说说感受:现在的理解就是,在玩RAC的时候,看了篇文章,上面讲解的时候,说明了其实本质上,RAC在拦截方法,类似于苹果CoreContext劫持方法,即苹果原生和JS互相调用的原理是一样的,因此特别注意了这个问题!

1、当然现在还没有搞清楚为什么加在_View上面,但是截取到btnAction方法的时候,则直接跳到自己截取到的方法里面!假如没有截取到,就崩溃!说明在这边RAC截取方式就是通过类似于JS劫持的方式来拦截到调用方法的!

posted on 2017-06-23 10:14 OliverLance 阅读(111) 评论(0) 收藏 举报
浙公网安备 33010602011771号