文档章节

runtime实现按钮点击事件

RainOrz
 RainOrz
发布于 06/25 17:52
字数 285
阅读 18
收藏 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
博文 110
码字总数 82431
作品 0
青浦
程序员
iOS UIButton之防止重复点击(控制事件响应时间间隔)

级别:★★☆☆☆ 标签:「UIButton Runtime」「UIButton点击频率」「UIButton防止多次点击」 作者: Xs·H 审校: QiShare团队 有几个实际业务场景需要控制响应事件的时间间隔。比如: 1、当...

QiShare
08/08
0
0
响应者链UIResponder-扩大UIButton的点击范围

在开发中,我们经常看到有按钮等的点击,会出现响应事件。按钮->view->ViewController->UIWindow->UIApplication,这就形成了一个响应链。本篇将讲述响应链的具体底层实现,大约花费10-15分钟...

国孩
07/28
0
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

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
49分钟前
4
1
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
59分钟前
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0
麒麟AI首席科学家现世

8月31日,华为发布了新一代顶级人工智能手机芯片麒麟980,成为全球首款7nm工艺手机芯片,AI方面也实现飞跃,支持人脸识别、物体识别、物体检测、图像分割、智能翻译等。 虽然如今人人都在热议...

问题终结者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部