文档章节

runtime实现按钮点击事件

RainOrz
 RainOrz
发布于 06/25 17:52
字数 285
阅读 17
收藏 0
点赞 0
评论 0

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码:

[self.btn handleControlEvent:UIControlEventTouchUpInside withBlock:^{
        NSLog(@"2%@",click);
    }];

差不多就是这个意思,当然了,此处还是预留了event,RAC直接连这个都没了,具体可以看这里

那么,问题来了,怎么实现呢?

首先,我们对系统的的UIButton做一个category,

然后,写点击事件:

.h

#import <UIKit/UIKit.h>

typedef void(^ActionBlock)(void);

@interface UIButton (ClickBlock)

- (void)handleControlEvent:(UIControlEvents)event withBlock:(ActionBlock)block;

@end

.m

#import "UIButton+ClickBlock.h"
#import <objc/runtime.h>

@implementation UIButton (ClickBlock)
- (void)handleControlEvent:(UIControlEvents)event withBlock:(ActionBlock)block
{
    if(!event)
        event=UIControlEventTouchUpInside;
    objc_setAssociatedObject(self, &"myBlock", block, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self addTarget:self action:@selector(blockEvent:) forControlEvents:event];
    
}
-(void)blockEvent:(UIButton *)sender
{
    ActionBlock block=objc_getAssociatedObject(self, &"myBlock");
    if(block)
    {
        block();
    }
}

此处只是demo哈!

这样子我们就可以按照之前的思路,写出来不分离的btnclick了

© 著作权归作者所有

共有 人打赏支持
RainOrz
粉丝 7
博文 100
码字总数 79126
作品 0
青浦
程序员
Swift中优雅的为UIButton添加链式的Block点击事件

UIButton是基于 action - target 的事件机制处理点击事件的。通常,如果我们需要添加一个 UIButton 的点击事件的时候,一般会这么做: 当然,可能对于同一个 button 我们可能会添加不止一个状...

BennyLoo
04/14
0
0
iOS开发-关于自定义控件很值得一看的文章( 四)

我么知道 是采用 (messaging)调用方法的,例如我们调用 的 方法 UIView simpleView = [[UIView alloc] init]; 简单的描述一下其中的过程: 程序一运行,所有的类方法(‘+’开头)和实例方法...

神补刀
2016/03/19
69
0
iOS UIButton 防止连续点击

防止 UIButton 的连续点击,无非就是网上那三种方法,前两种即手动设置 isEnabled、或者在点击的时候取消未执行的事件,再延时执行。这里重点说一下第三种,即重写 load 方法,在 load 方法的...

深度码农患者
05/22
0
0
Android攻城狮—监听(按钮)点击事件

onClick事件 所有的控件都有一个onClick事件,包括Button和ImageButton。 通过自身的.setOnClickListener(OnClickListener)方法添加点击事件 通过点击事件的监听可以实现点击按钮之后要发生什...

iBazinga
2016/11/10
16
0
UIButton防止重复点击的方式

使用UIButton的enabled或userInteractionEnabled 使用UIButton的enabled属性, 在点击后, 禁止UIButton的交互, 直到完成指定任务之后再将其enable即可. 1234567891011121314151617181920 [bt...

冰泪_
2016/08/09
13
0
u3d学习笔记二:unity事件机制的实现

事件机制广泛的存在于MVC架构中,事件机制的灵活性使我们的开发更为方便,下面对unity中事件机制的实现就个人的理解做一个简单的讲解: 一、直接绑定 直接创建button控件 创建testClick脚本,...

zds_c
04/17
0
0
Android控件笔记——监听按钮点击事件

onClick事件: 1、Button,ImageButton都拥有onClick事件,由自身的.setOnClickListener(OnClickListener)方法添加点击事件; 2、所有的控件都有onClick事件,并不仅仅是按钮控件有; 3、通过...

落叶-归根
2016/05/12
73
0
RxBinding使用和源码解析

RxJava想必做Android都用过,即使没用过肯定也听过。RxBinding这个库是 JakeWharton的大作,可以响应式的方式来处理UI的响应问题,比如按钮的点击事件,ListView的点击事件,EditText的文本变...

juexingzhe
2017/12/21
0
0
《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作

原创文章,欢迎转载。转载请注明:关东升的博客 目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制。 问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个...

tony关东升
2016/03/08
0
0
《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作

原创文章,欢迎转载。转载请注明:关东升的博客 目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制。 问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个...

智捷课堂
2016/01/25
18
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
10分钟前
0
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
10分钟前
0
0
vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
18分钟前
0
0
庆祝法国队夺冠:用Python放一场烟花秀

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。 这个有趣的小项目并不...

猫咪编程
19分钟前
0
0
SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
33分钟前
5
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
44分钟前
1
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
今天
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
40
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部