如何把uibutton封装成block

如何把uibutton封装成block


吃鸡游戏
浏览 477回答 2
2回答

呼啦一阵风

 将UIButton的addTarget: action: forControlEvents:改造成block建立UIButton+Block,将其引用到.pch中,#import "UIButton+Block.h"#import <Foundation/Foundation.h>#import <objc/runtime.h>typedef void (^ActionBlock)();@interface UIButton(Block)@property (readonly) NSMutableDictionary *event;- (void) handleControlEvent:(UIControlEvents)controlEvent withBlock:(ActionBlock)action;@end#import "UIButton+Block.h"@implementation UIButton(Block)static char overviewKey;@dynamic event;- (void)handleControlEvent:(UIControlEvents)event withBlock:(ActionBlock)block {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();}}@end

牛魔王的故事

将button的点击事件改为block1、自定义一个继承于UIButton的按钮2、声明block:返回值类型 函数名 参数列表typedef void (^ButtonBlock)(UIButton *);@interface MyButton : UIButton@property(nonatomic,copy)ButtonBlock block;- (void)addTapBlock:(ButtonBlock)block;@end3、重写button的点击事件的方法- (void)addTapBlock:(ButtonBlock)block{_block = block;[self addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];}- (void)buttonAction:(UIButton *)button{_block(button);}4、在视图控制器中调用button的block方法[button addTapBlock:^(UIButton *button){NSLog(@"按钮被点击了");}];
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5