UIButton拡張Blockクリックイベント
1899 ワード
主にruntimeによってプロパティを動的に関連付けます.上码!!!
使用方法は以下の通りです.
O了,喜欢的走心哦...
#import
typedef void(^ButtonBlock)(UIButton* btn);
@interface UIButton (Block)
/**
* button
*
* @param block
*/
- (void)addAction:(ButtonBlock)block;
/**
* button
*
* @param block
* @param controlEvents
*/
- (void)addAction:(ButtonBlock)block forControlEvents:(UIControlEvents)controlEvents;
@end
////////////////////////////////////////////////////
#import "UIButton+Block.h"
#import
@implementation UIButton (Block)
static char ActionTag;
/**
* button UIControlEventTouchUpInside
*
* @param block
*/
- (void)addAction:(ButtonBlock)block {
objc_setAssociatedObject(self, &ActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
[self addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
}
/**
* button
*
* @param block
* @param controlEvents
*/
- (void)addAction:(ButtonBlock)block forControlEvents:(UIControlEvents)controlEvents {
objc_setAssociatedObject(self, &ActionTag, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
[self addTarget:self action:@selector(action:) forControlEvents:controlEvents];
}
/**
* button
*
* @param sender
*/
- (void)action:(id)sender {
ButtonBlock blockAction = (ButtonBlock)objc_getAssociatedObject(self, &ActionTag);
if (blockAction) {
blockAction(self);
}
}
@end
使用方法は以下の通りです.
UIButton *testButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
testButton.backgroundColor = [UIColor redColor];
[self.view addSubview:testButton];
[testButton addAction:^(UIButton *btn) {
NSLog(@" ");
}];
[testButton addAction:^(UIButton *btn) {
NSLog(@" ");
} forControlEvents:UIControlEventTouchUpInside];
O了,喜欢的走心哦...