runtime添加屬性

mark

runtime在類別category中增加屬性的簡單方法;

UIView的tap事件快速獲取;

UIButton的touchUpInside事件快速獲??;

優(yōu)點是方便快捷,缺點是需要注意block的使用;

內容簡單實用,,,僅供初學者參考。。。

#import "UIView+DKView.h"

.h

//
//  UIView+DKView.h
//  DEMOKING
//
//  Created by 王亞振 on 2021/4/25.
//

#import <UIKit/UIKit.h>
typedef void (^DKTapBlock)(void);

@interface UIView (DKView)

/// 調用tapBlock簡單的單擊事件回調
@property (copy, nonatomic) DKTapBlock tapBlock;

@end

.m

//
//  UIView+DKView.m
//  DEMOKING
//
//  Created by 王亞振 on 2021/4/25.
//

#import "UIView+DKView.h"
#import <objc/runtime.h>

static char kDKTapBlock;

@implementation UIView (DKView)

/// runtime構建屬性
/// @param tapBlock 點擊回調
- (void)setTapBlock:(DKTapBlock)tapBlock {
    // OBJC_ASSOCIATION_COPY 的選取根據屬性選擇不同的類型
    objc_setAssociatedObject(self, &kDKTapBlock, tapBlock, OBJC_ASSOCIATION_COPY);
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMethod:)];
    [self addGestureRecognizer:tap];
}
- (DKTapBlock)tapBlock {
    return objc_getAssociatedObject(self, &kDKTapBlock);
}
- (void)tapMethod:(UIGestureRecognizer *)tap {
    if (self.tapBlock) {
        self.tapBlock();
    }
}

@end

#import "UIButton+DKButton.h"

.h

//
//  UIButton+DKButton.h
//  DEMOKING
//
//  Created by 王亞振 on 2021/4/25.
//

#import <UIKit/UIKit.h>

typedef void (^DKTouchBlock)(void);

@interface UIButton (DKButton)

/// 調用tapBlock簡單的單擊事件回調
@property (copy, nonatomic) DKTouchBlock touchBlock;

@end


.m

//
//  UIButton+DKButton.m
//  DEMOKING
//
//  Created by 王亞振 on 2021/4/25.
//

#import "UIButton+DKButton.h"
#import <objc/runtime.h>

static char kDKTouchBlock;

@implementation UIButton (DKButton)

/// runtime構建屬性
/// @param touchBlock 點擊回調
- (void)setTouchBlock:(DKTouchBlock)touchBlock {
    objc_setAssociatedObject(self, &kDKTouchBlock, touchBlock, OBJC_ASSOCIATION_COPY);
    [self addTarget:self
             action:@selector(touchMethod)
   forControlEvents:UIControlEventTouchUpInside];
}
- (DKTouchBlock)touchBlock {
    return objc_getAssociatedObject(self, &kDKTouchBlock);
}
- (void)touchMethod {
    if (self.touchBlock) {
        self.touchBlock();
    }
}

@end

使用方法

    self.view.tapBlock = ^{
        NSLog(@"這里點擊了view");
    };
    self.test2.touchBlock = ^{
        NSLog(@"這里點擊了button");
    };

IMG_0089.JPG

V動動手指(woai1101992)點個贊吧X

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容