爲類目(類別)添加屬性,使用storyboard設置邊框顏色(轉載)

原文地址


爲按鈕設置邊框以及邊框顏色通過storyboard,這裏使用了Category爲CALayer添加了一個UIColor類型的boderColorFromUIColor。

通常使用Category時,只能添加方法,不可添加屬性。但是在使用Storyboard時我們可能會使用到keyPath,這裏設置的key都需要是所設置視圖的屬性值,並且類型有所限制。

例如:我現在有一個按鈕,我想設置成圓角,並且是紫色邊框。並且我不想寫代碼,想通過storyboard直接設置。這樣看起來很帥(其實就是一個強迫症吧,因爲一直在用sb設置整個界面,但是突然出現幾個樣式,在sb中不可以直接設置,這種感覺很煩躁的,所以要解決掉它)。

爲類目(類別)添加屬性,,使用storyboard設置邊框顏色


遇到的問題:這裏key path 的type類型是固定的,這裏我們不可以添加。這裏只有一個UIColor類型的color,但是設置邊框的顏色,應該是CGColor的,所以類型不匹配,我們需要爲CALayer添加一個UIColor的屬性。這裏我們使用Category,不用疑問,對,是使用Category爲CALayer添加一個UIColor的屬性。


CALayer+Addition.h

#import <QuartzCore/QuartzCore.h>

#import <UIKit/UIKit.h>


@interface CALayer (Additions)


@property(nonatomic, strong) UIColor *borderColorFromUIColor;


- (void)setBorderColorFromUIColor:(UIColor *)color;


@end


CALayer+Addition.m

#import "CALayer+Additions.h"

#import <objc/runtime.h>

@implementation CALayer (Additions)


//static const void *borderColorFromUIColorKey = &borderColorFromUIColorKey;

//@dynamic borderColorFromUIColor;


- (UIColor *)borderColorFromUIColor {

    return objc_getAssociatedObject(self, @selector(borderColorFromUIColor));

}

-(void)setBorderColorFromUIColor:(UIColor *)color

{

    objc_setAssociatedObject(self, @selector(borderColorFromUIColor), color, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    [self.setBorderColorFromUI: self.borderColorFromUIColor];

}


- (void)setBorderColorFromUI:(UIColor *)color

{

    self.borderColor = color.CGColor;

    //    NSLog(@"%@", color);

    

}


這樣就成功爲CALayer添加了borderColorFromUIColor屬性,並且在key path裏可能成功設置該屬性,爲按鈕設置邊框顏色了。


實現效果

爲類目(類別)添加屬性,使用storyboard設置邊框顏色




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章