使用runtime 對UIbutton的點擊事件進行封裝

導語

我們寫項目時都需要使用- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents自定義btn的點擊事件如果做一些特別簡單的操作 能直接使用回調進行處理的話既增加了代碼的閱讀性又減少了代碼量

思路

利用block來做回調 ,

一,創建一個UIbutton 的類目 利用runtime 創建一個block屬性
typedef void(^chickTouchBlock)(void);
@property(nonatomic,strong)chickTouchBlock onechickBlock;
static chickTouchBlock _onechickBlock;

-(chickTouchBlock)onechickBlock{
    
    
    return objc_getAssociatedObject(self, &_onechickBlock);
}

-(void)setOnechickBlock:(chickTouchBlock)onechickBlock{
    
    
    objc_setAssociatedObject(self, &_onechickBlock, onechickBlock, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
}

ps:記得導入 #import <objc/runtime.h>

二,創建一個方法來實現UIbutton 點擊的回調
/**
 給按鈕添加回調點擊事件

 @param events 響應事件類型
 @param chickBlock 回調block
 */
-(void)addShjWithControlEvens:(UIControlEvents)events ChickBlock:(chickTouchBlock)chickBlock;
方法的實現
-(void)addShjWithControlEvens:(UIControlEvents)events ChickBlock:(chickTouchBlock)chickBlock{
    
    [self setOnechickBlock:chickBlock];
    
    [self addTarget:self action:@selector(chickBtn) forControlEvents:events];
    
}

-(void)chickBtn{
    
    if (self.onechickBlock) {
        
        self.onechickBlock();
    }
    
}

三,方法的使用

 [self.chooseTimer addShjWithControlEvens:UIControlEventTouchUpInside ChickBlock:^{
        
        NSLog(@"測試");
    }];

demo有用的話給個star??

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容