問題:
項(xiàng)目一般中如果我們想給xib中的view動(dòng)態(tài)的設(shè)置邊框侠姑、圓角之類的話,都會(huì)用上IBInspectable這個(gè)屬性露久,如下:
一般是兩種做法
1 弄一個(gè)UIView的類目撩荣,加上上面的這些屬性如下:
2 弄一個(gè)UIView的子類蚪燕,然后再加上這些屬性如下:
兩種方式大體上是相似的,都需要實(shí)現(xiàn)setter方法锦募,在里面用代碼設(shè)置屬性摆屯,
在xib面板上都會(huì)生成下面面板,然后通過他們?cè)O(shè)置
但是兩者都各有優(yōu)缺點(diǎn)糠亩,像第一種方案鸥拧,你只需要把類目文件放在工程中党远,然后任何xib上的view都能生成上面的面板屬性,而第二種則必須要與xib上的view關(guān)聯(lián)才可以富弦,如下
但是第二種的好處也是顯而易見的沟娱,就是可以起到立桿見影的效果,如下
但是我今天要講的不是上面兩種情況腕柜,而是IBInspectable的另外一種使用場(chǎng)景济似,用于你自定義的視圖,比如項(xiàng)目中經(jīng)常會(huì)遇到這樣一個(gè)場(chǎng)景:
項(xiàng)目中可能有多個(gè)地方會(huì)用到同一個(gè)視圖(比如顯示購物車數(shù)量和購物車圖標(biāo)的的視圖盏缤,我們項(xiàng)目中就有將近十個(gè)頁面顯示這個(gè)視圖)假如這個(gè)視圖里面有一個(gè)label砰蠢,現(xiàn)在有這樣的需求,在這個(gè)頁面label是黑色唉铜,在另外一個(gè)頁面label又是紅色的台舱,就是存在不同頁面這個(gè)view里面label對(duì)應(yīng)的顏色不一樣的情況,
那么通常的做法是自定義一個(gè)View潭流,然后把這個(gè)view的label屬性暴露出來(或者你不想暴露label,暴露一個(gè)titleColor屬性出來)竞惋,然后在每個(gè)頁面用代碼去修改,這種做法應(yīng)該比較普遍灰嫉,
但是仔細(xì)想一下拆宛,這個(gè)自定義view我肯定是支持xib的,那么能不能直接在xib上關(guān)聯(lián)這個(gè)view的時(shí)候讼撒,順便去設(shè)置呢浑厚,不用每個(gè)頁面還要用代碼寫,多麻煩根盒,是吧钳幅,這就用到了上面的IBInspectable屬性,如下
@interfaceKJCustomView :UIView
@property(nonatomic)IBInspectable UIColor*titleColor;
@property(nonatomic)IBInspectable CGFloat titleFontSize;
@end
- (void)layoutSubviews {
[superlayoutSubviews];
self.kjTitleLable.frame=CGRectMake(10, (self.bounds.size.height-30)/2,self.bounds.size.width-20,30);
self.kjTitleLable.textColor=self.titleColor;
self.kjTitleLable.font= [UIFontsystemFontOfSize:self.titleFontSize];
}
對(duì)應(yīng)的xib上設(shè)置如下:
最終結(jié)果:
就這么簡(jiǎn)單炎滞,是吧贡这,是不是很方便,demo地址