#import <UIKit/UIKit.h>
#import <objc/runtime.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^ButtonClickCallBack)(UIButton *button);
@interface UIButton (Handle)
- (void)handleClickCallBack:(ButtonClickCallBack)callBack;
@end
NS_ASSUME_NONNULL_END
#import "UIButton+Handle.h"
static char *buttonClickKey;
@implementation UIButton (Handle)
- (void)handleClickCallBack:(ButtonClickCallBack)callBack {
objc_setAssociatedObject(self, &buttonClickKey, callBack, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];
}
- (void)buttonClicked {
ButtonClickCallBack callBack = objc_getAssociatedObject(self, &buttonClickKey);
if (callBack) {
callBack(self);
}
}
@end
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
#import "ViewController.h"
#import "UIButton+Handle.h"
@interface ViewController ()
@property (nonatomic, strong) UIButton *testButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = @"Test3ViewController";
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
button1.frame = CGRectMake(50, 150, 250, 100);
button1.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.1];
[button1 setTitle:@"UIButton+Handle" forState:UIControlStateNormal];
self.testButton = button1;
[self.view addSubview:self.testButton];
[self.testButton handleClickCallBack:^(UIButton *button) {
NSLog(@"block --- click UIButton+Handle");
}];
}
@end