?通過(guò)block對(duì)button的點(diǎn)擊事件封裝
具體的實(shí)現(xiàn)過(guò)程
typedefvoid(^tapActionBlock)(UIButton *button);
@interfaceUIButton (Block)
@property(nonatomic,copy)tapActionBlock actionBlock;
//第一種封裝
/**
?通過(guò)block對(duì)button的點(diǎn)擊事件封裝
?@param frame? ? ? ? ? ? frame
?@param title? ? ? ? ? ? 按鈕文字
?@param font? ? ? ? ? ? ? 按鈕文字的大小
?@param titleColor? ? ? ? 按鈕文字的顏色
?@param backgroundColor? 按鈕的背景顏色
?@param btnImageName? ? ? 按鈕的圖片
?@param actionBlock? ? ? 點(diǎn)擊事件回調(diào)block
?@return? ? ? ? ? ? ? ? ? button
?*/
+ (UIButton *)createBtnFrame:(CGRect)frame title:(NSString *)title titleFont:(CGFloat)font titleColor:(UIColor *)titleColor? backgroundColor:(UIColor *)backgroundColor btnImageName:(NSString *)btnImageName action:(tapActionBlock)actionBlock;
在.m文件中實(shí)現(xiàn)其方法
staticNSString *keyOfUseCategoryMethod;//用分類方法創(chuàng)建的button葡幸,關(guān)聯(lián)對(duì)象的key
staticNSString *keyOfBlock;
+(UIButton *)createBtnFrame:(CGRect)frame title:(NSString *)title titleFont:(CGFloat)font titleColor:(UIColor *)titleColor backgroundColor:(UIColor *)backgroundColor btnImageName:(NSString *)btnImageName action:(tapActionBlock)actionBlock{
? ? UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
? ? button.frame= frame;
? ? [button setTitle:title forState:UIControlStateNormal];
? ? button.titleLabel.font= [UIFont systemFontOfSize:font];
? ? [button setTitleColor:titleColor forState:UIControlStateNormal];
? ? button.backgroundColor= backgroundColor;
? ? [button setImage:[UIImage imageNamed:btnImageName]? forState:UIControlStateNormal];
? ? [button addTarget:button action:@selector(tapAction:) forControlEvents:UIControlEventTouchUpInside];
? ? /**
?? ? *用runtime中的函數(shù)通過(guò)key關(guān)聯(lián)對(duì)象
?? ? *
?? ? *objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
?? ? *id object? ? ? ? ? ? ? ? ? ? 表示關(guān)聯(lián)者最筒,是一個(gè)對(duì)象,變量名理所當(dāng)然也是object
?? ? *const void *key? ? ? ? ? ? ? 獲取被關(guān)聯(lián)者的索引key
?? ? *id value? ? ? ? ? ? ? ? ? ? ? 被關(guān)聯(lián)者蔚叨,這里是一個(gè)block
?? ? *objc_AssociationPolicy policy 關(guān)聯(lián)時(shí)采用的協(xié)議床蜘,有assign辙培,retain,copy等協(xié)議邢锯,一般使用OBJC_ASSOCIATION_RETAIN_NONATOMIC
?? ? */
? ? objc_setAssociatedObject (button , &keyOfUseCategoryMethod, actionBlock,OBJC_ASSOCIATION_COPY_NONATOMIC);
? ? returnbutton;
}
按鈕的點(diǎn)擊事件
- (void)tapAction:(UIButton*)sender{
? ? /**
?? ? * 通過(guò)key獲取被關(guān)聯(lián)對(duì)象
?? ? *objc_getAssociatedObject(id object, const void *key)
?? ? *
?? ? */
? ? tapActionBlockblock = (tapActionBlock)objc_getAssociatedObject (sender , &keyOfUseCategoryMethod);
? ? if(block) {
? ? ? ? block(sender);
? ? }
}
- (void)setActionBlock:(tapActionBlock)actionBlock{
? ? objc_setAssociatedObject (self, &keyOfBlock, actionBlock,OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (tapActionBlock)actionBlock{
? ? returnobjc_getAssociatedObject (self, &keyOfBlock);
}
調(diào)用方法
UIButton *btn =[UIButtoncreateBtnFrame:CGRectMake(100,200,20,20)title:@"eeee"titleFont:12titleColor:[UIColor yellowColor]backgroundColor:[UIColor blueColor]btnImageName:@"headerDefault"action:^(UIButton *button) {
回調(diào)的按鈕的點(diǎn)擊事件
? ? }];
?? ?[self.viewaddSubview:btn];