• RunTime 给类添加属性


    RunTime
    网上有很多人都不知道Runtime到底是干嘛的?有很多博主都是长篇大论给他们讲这个讲那个,我感觉还不如实例来的实在。
    很简单的一个例子:我们都知道会有这样的需求,未读消息列表的图片上要有一个红点。但是有的要黄点,有的要黑点,那你怎么写的呢?那你总不能一个一个的改吧,所以我们就可以用到Runtime.

    1.首先建一个扩展类,给类添加一个颜色属性的Badge
    #import <UIKit/UIKit.h>
    @interface UIButton (MessageButton)
    @property (nonatomic,strong) UIColor *badgeBGColor;

    2. 然后 在 .m 文件里面 导入包
    #import <objc/runtime.h>

    3. 然后给这个属性 创建一个唯一的内存地址
    static const char bageBGColorKey;

    4.首先实现他的 set get 方法
    -(void)setBadgeBGColor:(UIColor *)badgeBGColor
    {
    objc_setAssociatedObject(self, &bageBGColorKey, badgeBGColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    -(UIColor *)badgeBGColor {

    return objc_getAssociatedObject(self, &bageBGColorKey);
    }

    5. 这里要说有一个点就是要用底层的api 开实现方法  
    objc_setAssociatedObject
    objc_getAssociatedObject
    这个其实就是前面加个objc 而已

    6.然后再建一个 方法来实现他的 badge
    -(void)framBGColor:(UIColor *)color
    {
    UIImageView *imageViewBgColor = [[UIImageView alloc]initWithFrame:CGRectMake(self.size.width-5, 0, 5, 5)];
    imageViewBgColor.backgroundColor = color;
    imageViewBgColor.layer.cornerRadius = 2.5f;
    imageViewBgColor.layer.masksToBounds = YES;
    [self addSubview:imageViewBgColor];

    }
    7. 再set方法里面调用这个方法
    -(void)setBadgeBGColor:(UIColor *)badgeBGColor
    {
    objc_setAssociatedObject(self, &bageBGColorKey, badgeBGColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self framBGColor:badgeBGColor];
    }

    8、其实有很多的方法都可以用到 比如button 要传多个属性的时候 也可以用的。可以添加很多属性和方法。

  • 相关阅读:
    python pandas库和stats库计算偏度和峰度(附程序)
    python matplot 字体配置-中文手绘漫画风格
    流密码
    信息安全和密码学基础知识
    剑指offer48-把字符串转换成整数
    剑指offer47-不用加减乘除做加法
    剑指offer46-求1+2+...+n
    剑指offer45-孩子们的游戏
    剑指offer44-扑克牌顺子
    剑指offer43-翻转单词顺序列
  • 原文地址:https://www.cnblogs.com/yuejunjie/p/6635068.html
Copyright © 2020-2023  润新知