初玩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 ...
随机推荐
- 略过 Mysql 5.7的密码策略
之前从mysql 5.6的时候,mysql 还没有密码策略这个东东,所以我们每个用户的密码都可以随心所欲地设置,什么123 ,abc 这些,甚至你搞个空格,那也是OK的. 而mysql.user 表里 ...
- 产品经理学Python:条件控制
条件控制其实就是if...else...(如果...条件是成立的,就做...:反之,就做...)的使用,其基本结构是: 具体看下面这个例子: def account_login(): # 定义函数 p ...
- .Net程序员学用Oracle系列(24):数据字典、死锁
1.静态数据字典 1.1.实用静态数据字典 1.2.运用静态数据字典 2.动态数据字典 2.1.实用动态性能视图 2.2.运用动态性能视图 3.死锁 3.1.定位死锁 3.2.解锁方法 3.3.强制删 ...
- Linux系统档案与文件系统的压缩与打包
以下文章基于centos6.5 文章引自:http://www.jb51.net/LINUXjishu/105916.html 一.Linux下常见的压缩指令 在linux的环境中,压缩文件的扩展名大 ...
- java内存模型3
数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序. 当代码 ...
- RabbitMQ学习3----运行和管理RabbitMQ
1.服务为管理 Erlang天生就是为了让应用程序无需知道对方是否存在同一台机器上即可互相通信. Erlang节点:Erlang虚拟机的每个实例.多个Erlang应用程序可以运行在同一个节点之上.节点 ...
- 空间索引 - GeoHash算法及其实现优化
h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0 } body { font-family: "Helvetica Neue&qu ...
- Circuit Breaker Features
Better to use a circuit breaker which supports the following set of features: Automatically time-out ...
- C#打开php链接传参然后接收返回值
php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate'] ...
- ehcache-----在spring和hibernate下管理ehcache和query cache
1. 在Hibernate配置文件中设置: <!-- Hibernate SessionFactory --> <bean id="sessionFactory" ...