ios控件UIButton的封裝

?通過(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];

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容