美文网首页iOS Developer
Runtime实现UIButton+Block

Runtime实现UIButton+Block

作者: Zhui_Do | 来源:发表于2017-04-05 13:33 被阅读57次
#import <UIKit/UIKit.h>
typedef void(^ButtonBlock)(UIButton* btn);

@interface UIButton (Block)

- (void)addAction:(ButtonBlock)block;
- (void)addAction:(ButtonBlock)block forControlEvents:(UIControlEvents)controlEvents;

@end
#import "UIButton+Block.h"
#import <objc/runtime.h>

@implementation UIButton (Block)
static char ActionTag;

- (void)addAction:(ButtonBlock)block
{
    objc_setAssociatedObject(self, &ActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)addAction:(ButtonBlock)block forControlEvents:(UIControlEvents)controlEvents
{
    objc_setAssociatedObject(self, &ActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self addTarget:self action:@selector(action:) forControlEvents:controlEvents];
}

- (void)action:(id)sender
{
    ButtonBlock blockAction = (ButtonBlock)objc_getAssociatedObject(self, &ActionTag);
    if (blockAction)
    {
        blockAction(self);
    }
}

@end

只能用于一种evet下,如果为两种evet使用会出现覆盖,执行后关联的block

相关文章

  • Runtime实现UIButton+Block

    只能用于一种evet下,如果为两种evet使用会出现覆盖,执行后关联的block

  • OC -> Runtime

    Runtime简介 Runtime用处 Runtime实践 Runtime 类方法调用实现。Person * p ...

  • Runtime

    Runtime:运行时使用Runtime就是使用苹果提供的API使用Runtime可以实现OC无法实现的:1.使用...

  • iOS - RunTime(Swift)

    RunTime实现存储属性(本质也是一个计算属性) RunTime实现方法交换

  • 【iOS】利用runtime获取某个类的属性

    runtime对于大家并不陌生,开发中用到runtime的地方并不少,很多情况下runtime实现了OC无法实现的...

  • Runtime

    概述 runtime 是什么 isa指针 runtime 怎么添加属性,方法等 runtime 如何实现weak属...

  • iOS编程中的方法交换

    runtime 的实现原理:

  • ios-Runtime(运行时)

    利用runtime来实现归档解档 方法交换 俗称 OC的方法欺骗 KVO的实现原理 用runtime来实现KVO...

  • Objective-C Runtime浅析

    前言 Runtime是什么 Runtime的实现原理消息传递机制Runtime基础数据结构NSObject & i...

  • OC各路大神博客、各种知识点博客

    Runtime源码苹果官方Runtime源码能跑的Runtime源码Block实现源码 各路大神博客 南峰子的技术...

网友评论

    本文标题:Runtime实现UIButton+Block

    本文链接:https://www.haomeiwen.com/subject/xcutattx.html