[iOS]Objective-C Runtime学习笔记之:为UIButton添加响应block

1.新建UIButton分类

//UIButton+Block.h
#import <UIKit/UIKit.h>

typedef void (^btnBlock)();

@interface UIButton (Block)

- (void)addActionWithBlock:(btnBlock)block;

@end

2.实现

  • objc_setAssociatedObject
    用于给对象添加关联对象,传入 nil
    则可以移除已有的关联对象;
  • objc_getAssociatedObject
    用于获取关联对象;
  • objc_removeAssociatedObjects
    用于移除一个对象的所有关联对象。
//UIButton+Block.m
#import "UIButton+Block.h"
#import <objc/runtime.h>
static const char btnKey;

@implementation UIButton (Block)
- (void)addActionWithBlock:(btnBlock)block
{
    if (block)
    {
        objc_setAssociatedObject(self, &btnKey, block, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    [self addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];
}

- (void)btnAction
{
    btnBlock block = objc_getAssociatedObject(self, &btnKey);
    block();
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容