ios按钮事件的block封装

按钮的生成和事件经常要被分开放,经常两头找,很浪费时间,而且不直观,对于处女座程序员来说这是不能忍的!(我不是处女座。。)

 [button addTarget:selfaction:@selector(event)forControlEvents:UIControlEventTouchUpInside];


/*balabalabala  一大堆代码*/


-(void)event

{

//这里写按钮事件

}


这样的写法是不是不太方便呢,假如中间穿插了很多控件,那么按钮和方法就活生生的被分开了,他们其实是很想在一起的,相信我!


好吧,我要来成人之美了 ~~~


先上用法 

  UIButton *button =[[UIButton alloc]init];

    [button addAcionBlock:^{

        //这里写按钮事件

    }];

是不是永不分离了呢。


原理就是用block啦,接下来上我封装的分类,参考了网上的资料,不过忘了原作者是谁,罪过罪过。

下面是我自己建的category     大家也可以自己命名。


  UIButton+actionBlock.h--------------------这是.h文件


#import

#import

#import


@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,就可以使用啦

你可能感兴趣的:(ios按钮事件的block封装)