#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIButton (Block)
- (void)addTargetEventforControlEvents:(UIControlEvents)controlEvents block:(void (^)(UIButton * button))block;
@end
NS_ASSUME_NONNULL_END
#import "UIButton+Block.h"
#import <objc/runtime.h>
typedef void(^ButtonTargetBlock)(UIButton * button);
static void * buttonEventsBlockKey = &buttonEventsBlockKey;
@interface UIButton ()
/** 事件回调的block */
@property (nonatomic, copy) ButtonTargetBlock buttonTargetBlock;
@end
@implementation UIButton (Block)
-(ButtonTargetBlock)buttonTargetBlock
{
return objc_getAssociatedObject(self, &buttonEventsBlockKey);
}
-(void)setButtonTargetBlock:(ButtonTargetBlock)buttonTargetBlock
{
objc_setAssociatedObject(self, &buttonEventsBlockKey, buttonTargetBlock, OBJC_ASSOCIATION_COPY);
}
/**
按钮添加回调block
*/
- (void)addTargetEventforControlEvents:(UIControlEvents)controlEvents block:(void (^)(UIButton * button))block
{
self.buttonTargetBlock = block;
[self addTarget:self action:@selector(blcokButtonClicked:) forControlEvents:controlEvents];
}
/**
按钮点击事件
*/
- (void)blcokButtonClicked:(UIButton *)sender
{
if (self.buttonTargetBlock)
{
self.buttonTargetBlock(sender);
}
}
@end
调用
#import "UIButton+Block.h"
UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
[button addTargetEventforControlEvents:UIControlEventTouchUpInside block:^(UIButton * _Nonnull button) {
}];