初玩RAC
之前因为项目的原因以及ReactiveCocoa框架导入到项目老是报错的原因,导致我这边一直没有能好好的将ReactiveCocoa运行起来,最近看了Hank老师的视频,而且项目中我们使用的就是OC,因此还是决定使用ReactiveObjC来尝试一下RAC。
1、下面是写的Demo界面代码:
-(void)createUI
{
self.view.backgroundColor =[UIColor whiteColor]; UIView * view = [UIView new];
view.backgroundColor = [UIColor orangeColor];
[self.view addSubview:view]; _view =view; [view mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_offset();
make.right.mas_offset(-);
make.height.mas_equalTo(); }]; UIButton * btn = [[UIButton alloc] init];
_btn=btn;
btn.backgroundColor =[UIColor redColor];
[view addSubview:btn];
//注意的是当视图为空的时候,界面当然没有办法进行添加,然后自然就会崩溃了
[btn addTarget:_view action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];
[btn mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_offset();
make.right.mas_offset(-);
make.height.mas_offset();
}]; UIView * testGes = [UIView new];
testGes.backgroundColor = [UIColor redColor];
[self.view addSubview:testGes];
[testGes mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(_view.mas_bottom).offset();
make.left.mas_equalTo(self.view.mas_left).offset();
make.right.mas_equalTo(self.view.mas_right).offset(-);
make.height.mas_equalTo();
}]; #pragma 可以截取到
//1、使用手势也是可以获取到事件,可以截取到
UITapGestureRecognizer * ges = [[UITapGestureRecognizer alloc]init];
[testGes addGestureRecognizer:ges]; [[ges rac_gestureSignal]subscribeNext:^(__kindof UIGestureRecognizer * _Nullable x) {
NSLog(@"触发点击事件");
}]; }
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劫持的方式来拦截到调用方法的!

初玩RAC的更多相关文章
- 初玩Linux部署项目
1,先安装虚拟机2,安装centOS3,安装mysql 安装mysql客户端: yum install mysql 安装mysql 服务器端: yum install mysql-server yum ...
- [异常解决] 初玩SAE遇到的小问题——注册&创建项目+MyEclipse装插件直接部署+一个简单的JSP部署实现
① 新浪SAE快速上手教程:http://jingyan.baidu.com/season/43090 上面一个链接是针对PHP的相关介绍,如果用java还有点不一样,具体请看新浪SAE官网:http ...
- 初玩OpenWRT之编译TP-Link WR841N V8固件
0x00 安装依赖 安装git以下载OpenWrt源码.安装编译工具以进行交叉编译: sudo apt-get update sudo apt-get install build-essential ...
- 初玩Docker
Docker 和VM的区别 Docker就是类似于一个打包好的环境,相关的服务都安装在里面,可以直接使用的. VM就相当于另外一套独立的系统,独立的IP,虚拟硬件. 要使用就需要单独构建一套才可以. ...
- 初玩PLSQL连接 Oracle
1. 官网下载合适的[Instant Client] https://www.oracle.com/database/technologies/instant-client/winx64-64-dow ...
- ASP.NET Core 借助 K8S 玩转容器编排
Production-Grade Container Orchestration - Automated container deployment, scaling, and management. ...
- Cocos2dx3.1-Android环境搭建初体验
初玩Cocos2dx,多多包涵. 感觉版本号之间的差异比較大.相对前面的版本号来说.3.X更easy上手.更方便了. 一.安装python.我的python-2.7.3. 配置环境变量 系统变量里:在 ...
- 为什么我们要让人工智能玩游戏:微软Project AIX
<我的世界>游戏 2016年7月注:Project AIX已正式更名为Project Malmo 注:本文编译自Project AIX: Using Minecraft to build ...
- 前端神器avalonJS入门(一)
转自:http://www.cnblogs.com/vajoy/p/4063824.html avalonJS是司徒正美开发和维护的前端mvvm框架,可以轻松实现数据的隔离和双向绑定,相比angula ...
随机推荐
- Spring Cloud构建微服务架构(一)服务注册与发现
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...
- Java爬虫(一)利用GET和POST发送请求,获取服务器返回信息
本人所使用软件 eclipse fiddle UC浏览器 分析请求信息 以知乎(https://www.zhihu.com)为例,模拟登陆请求,获取登陆后首页,首先就是分析请求信息. 用UC浏览器F1 ...
- jenkins 设置自动发送邮件
1.测试邮件发送 进入jenkins系统管理-->系统设置做如下配置 1.设置系统管理员邮件地址,这是一个全局变量,意味着所有的jenkins执行的任务,最后都会通过这个邮件地址发送邮件 ...
- C# 在iis windows authentication身份验证下,如何实现域用户自动登录
前言: 该博文产生的背景是有个项目在客户那部署方式为iis windows身份验证,而客户不想每次登录系统都要输入帐号和密码来登录. 因此需要得到域用户,然后进行判断该用户是否可以进入系统. 解决方法 ...
- Docker - 访问仓库
仓库与注册服务器 仓库(Repository)集中存放镜像的项目或目录. 注册服务器(Registry)管理仓库的服务器,服务器上可以有多个仓库,每个仓库有多个镜像. 例如:在仓库地址docker.i ...
- percona-xtrabackup安装
二进制包安装(推荐安装方式,不用安装依赖包,非常方便): 1.下载安二进制包: wget https://www.percona.com/downloads/XtraBackup/Perco ...
- Telegram学习解析系列(一):认识一下Telegram的源码
前言: Telegram不知道有多少同行听过这玩意,或者在看它的源码.我是出于工作原因才接触到这东西,看的真是的......变方了!一个月估计刚刚找到门,还没进去多深,把自己的心得和对源码的认识以及我 ...
- grep与正则表达式
grep的作用:文本搜索工具,根据用户指定的"模式"对目标文件逐行进行匹配检查:打印匹配到的行. 模式:正则表达式编写的过滤条件. 正则表达式(REGEXP):由一类特殊字符及文本 ...
- JavaScript知识点整理(一)
JavaScript知识点(一)包括 数据类型.表达式和运算符.语句.对象.数组. 一.数据类型 1) js中6种数据类型:弱类型特性 5种原始类型:number(数字).string(字符串).bo ...
- 基于HTML5快速搭建TP-LINK电信拓扑设备面板
今天我们以真实的TP-LINK设备面板为模型,完成设备面板的搭建,和指示灯的闪烁和图元流动. 先来目睹下最终的实现效果:http://www.hightopo.com/demo/blog_tplink ...