导语
我们写项目时都需要使用- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
自定义btn的点击事件如果做一些特别简单的操作 能直接使用回调进行处理的话既增加了代码的阅读性又减少了代码量
思路
利用block来做回调 ,
一,创建一个UIbutton
的类目 利用runtime 创建一个block属性
typedef void(^chickTouchBlock)(void);
@property(nonatomic,strong)chickTouchBlock onechickBlock;
static chickTouchBlock _onechickBlock;
-(chickTouchBlock)onechickBlock{
return objc_getAssociatedObject(self, &_onechickBlock);
}
-(void)setOnechickBlock:(chickTouchBlock)onechickBlock{
objc_setAssociatedObject(self, &_onechickBlock, onechickBlock, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
ps:记得导入 #import <objc/runtime.h>
二,创建一个方法来实现UIbutton
点击的回调
/**
给按钮添加回调点击事件
@param events 响应事件类型
@param chickBlock 回调block
*/
-(void)addShjWithControlEvens:(UIControlEvents)events ChickBlock:(chickTouchBlock)chickBlock;
方法的实现
-(void)addShjWithControlEvens:(UIControlEvents)events ChickBlock:(chickTouchBlock)chickBlock{
[self setOnechickBlock:chickBlock];
[self addTarget:self action:@selector(chickBtn) forControlEvents:events];
}
-(void)chickBtn{
if (self.onechickBlock) {
self.onechickBlock();
}
}
三,方法的使用
[self.chooseTimer addShjWithControlEvens:UIControlEventTouchUpInside ChickBlock:^{
NSLog(@"测试");
}];