zoukankan      html  css  js  c++  java
  • 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 要传多个属性的时候 也可以用的。可以添加很多属性和方法。

  • 相关阅读:
    DataTable进行排序Asc升序,Desc降序
    Money型字段小数点后保留两位小数
    删除RHSA文件方法
    PowerDesigner 同名问题解决 Entity Attribute name uniqueness
    Repeater嵌套绑定Repeater以及内层调用外层数据
    让A超链接无效的办法 阻止元素发生默认的行为
    图的遍历
    Modular Production Line
    网络流24题-最长k可重区间集问题
    运输计划
  • 原文地址:https://www.cnblogs.com/yuejunjie/p/6635068.html
Copyright © 2011-2022 走看看