初玩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 ...
随机推荐
- redis连接池的使用方法
所需jar:jedis-2.8.0.jar和commons-pool-2-2.3jar Jedis操作步骤如下:1->获取Jedis实例需要从JedisPool中获取:2->用完Jedis ...
- PL/SQL + Oracle客户端 配置记录
oracle一直都没怎么用. oracle pl/sql也是在别人帮助下完成配置. 这次电脑重装后,自己搞定总结了下怎么配置. 1.下载Oracle 客户端. 安装的版本是win64_11gR2_cl ...
- python 基本数据类型练习题
练习题一.元素分类有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.即: {' ...
- 二叉树遍历 C#
二叉树遍历 C# 什么是二叉树 二叉树是每个节点最多有两个子树的树结构 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第h层有叶子结点,并 ...
- New Adventure----GUI Design Studio
新建项目工程 File->New Project 新建设计文件 Project->New Design 单个设计文件的页面,F9运当前设计页面 页面控件中有绿色包围的控件为 ...
- 【JavaScript中的this详解】
前言 this用法说难不难,有时候函数调用时,往往会搞不清楚this指向谁?那么,关于this的用法,你知道多少呢? 下面我来给大家整理一下关于this的详细分析,希望对大家有所帮助! this指向的 ...
- Google Android Studio Kotlin 开发环境配置
Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对Kotlin的重视,本文就介绍一下Android Studio下的Kot ...
- Java Class Loader
Reference: [1] http://www.cnblogs.com/kevin2chen/p/6714214.html 当调用 java命令运行一个java程序时,会启动一个java虚拟机进程 ...
- Java反射机制剖析(一)-定义和API
1. 什么是Java反射机制 Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法.这种运行时的动态获取就是Java的反射机制.其 ...
- SpringMVC中使用RedirectAttributes重定向传参,防止暴露参数
RedirectAttributes是SpringMVC3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的. 当我从jsp页面函数中带参数到controller层方法,方法执行完毕后返回 ...