按钮的生成和事件经常要被分开放,经常两头找,很浪费时间,而且不直观,对于处女座程序员来说这是不能忍的!(我不是处女座。。)
[button addTarget:selfaction:@selector(event)forControlEvents:UIControlEventTouchUpInside];
/*balabalabala 一大堆代码*/
-(void)event
{
//这里写按钮事件
}
这样的写法是不是不太方便呢,假如中间穿插了很多控件,那么按钮和方法就活生生的被分开了,他们其实是很想在一起的,相信我!
好吧,我要来成人之美了 ~~~
先上用法
UIButton *button =[[UIButton alloc]init];
[button addAcionBlock:^{
//这里写按钮事件
}];
是不是永不分离了呢。
原理就是用block啦,接下来上我封装的分类,参考了网上的资料,不过忘了原作者是谁,罪过罪过。
下面是我自己建的category 大家也可以自己命名。
UIButton+actionBlock.h--------------------这是.h文件
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface UIButton (actionBlock)
-(void)addAcionBlock:(VoidBlock)action;
@end
UIButton+actionBlock.h--------------------这是.m文件
#import "UIButton+actionBlock.h"
@implementation UIButton (actionBlock)
static char overviewKey;
- (void)addAcionBlock:(VoidBlock)action
{
objc_setAssociatedObject(self, &overviewKey, action,OBJC_ASSOCIATION_COPY_NONATOMIC);
[selfaddTarget:selfaction:@selector(callActionBlock:)forControlEvents:UIControlEventTouchUpInside];
}
- (void)callActionBlock:(id)sender {
VoidBlock block = (VoidBlock)objc_getAssociatedObject(self, &overviewKey);
if (block) {
block();
}
}
@end
大家可以拷贝这两个文件的代码到你们创建的分类里,相应的import,就可以使用啦