一,首先对button定义block
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
typedef void (^ActionBlock)();//声明block
@interface UIButton (Block)
@property (readonly) NSMutableDictionary *event;//事件
- (void) handleControlEvent:(UIControlEvents)controlEvent withBlock:(ActionBlock)action;//方法
@end
二,.m文件代码如下
#import "UIButton+Block.h"
@implementation UIButton (Block)
static char overviewKey;
@dynamic event;
- (void)handleControlEvent:(UIControlEvents)event withBlock:(ActionBlock)block {
if (block) {
objc_removeAssociatedObjects(self);
objc_setAssociatedObject(self, &overviewKey, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
[self addTarget:self action:@selector(callActionBlock:) forControlEvents:event];
}
}
- (void)callActionBlock:(id)sender {
ActionBlock block = (ActionBlock)objc_getAssociatedObject(self, &overviewKey);
if (block) {
block();
}
}
三,导入文件#import "UIButton+Block.h",和调用
UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(10, 100, self.view.frame.size.width-20,60 )];
[button setTitle:@"block" forState:UIControlStateNormal];
button.backgroundColor =[UIColor redColor];
[button handleControlEvent:UIControlEventTouchUpInside withBlock:^{
NSLog(@"button block");
}];
[self.view addSubview:button];
完