美文网首页IOS
runtime添加属性

runtime添加属性

作者: DEMOKING | 来源:发表于2021-04-25 15:19 被阅读0次

mark

runtime在类别category中增加属性的简单方法;

UIView的tap事件快速获取;

UIButton的touchUpInside事件快速获取;

优点是方便快捷,缺点是需要注意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

相关文章

  • runtime 分类不能添加属性

    分类不能添加属性,类别可以,添加runtime之后,可以添加属性

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • iOS用runtime给Category添加属性

    用runtime给Category添加属性 1、添加属性 (1)UIViewController+CXHelp.h...

  • runtime添加属性

      运行期不能对类对象添加ivar,因为在编译期类的内存大小布局已经确定,在运行期不能修改类对象的内存空间,所以不...

  • runtime添加属性

    OBJC_ASSOCIATION_COPY。 enum { OBJC_ASSOCIATION_ASSIGN = 0...

  • runtime添加属性

    项目初期,项目经理提出一个需求,如下: 为了整个项目统一,我们需要在基类中来实现,为了区别我们新建一个基类的cat...

  • runtime添加属性

    mark runtime在类别category中增加属性的简单方法; UIView的tap事件快速获取; UIBu...

  • 动态添加属性

    动态添加属性:什么时候需要动态添加属性? 开发场景:给系统的类添加属性的时候,可以使用runtime动态添加属性方...

  • Runtime

    概述 runtime 是什么 isa指针 runtime 怎么添加属性,方法等 runtime 如何实现weak属...

  • Objective-C关联对象的实现

    目的 在 NSObject 类中,添加 name 属性。 方案 利用 runtime 的相关方法: 动态添加属性 ...

网友评论

    本文标题:runtime添加属性

    本文链接:https://www.haomeiwen.com/subject/ynvdrltx.html