IBInspectable和IB_DESIGNABLE的使用

? ? ? ? 最近無意中知道了IBInspectable和IB_DESIGNABLE,感覺如果在項目中使用會給我們程序員帶來意想不到的的方便.試想下:在做應用的UI設計的時候,如果屬性能夠在Interface Builder的圖形化界面進行設置,并且動態(tài)的預覽到效果,那樣無疑會大大提高應用的開發(fā)效率。而XCode為我們提供了這樣的一種方式,就是使用IBInspectable和IB_DESIGNABLE.(Xcode 6出現(xiàn)的這兩個屬性-->原理就是在xib里面設置完成之后幫我們添加一個runtime attributes,雖然我們也可以通過User Defined Rumtime Attributes可以在Interface Builder中,設置一些KVC屬性的值,但是這樣做不容易調(diào)試和后期維護).

IBInspectable

讓支持KVC的屬性能夠在Attribute Inspector中配置。其修飾成員變量,其修飾的變量可以在xib右邊的控制面板里面直接更改其值

例如我想實現(xiàn)一個自定義的UItextField,通過xib設置它的一些屬性(圓角,邊線寬度,邊線顏色等),此時可以寫一個UIView的分類,在.h文件中聲明這三個屬性并用IBInspectable修飾.

@interface UIView (Inspectable)

/**

*? 可以在xib里面直接設置的:圓角

*/

@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;

/**

*? 可以在xib里面直接設置的:邊線寬度

*/

@property (nonatomic, assign) IBInspectable CGFloat borderWidth;

/**

*? 可以在xib里面直接設置的:邊線顏色

*/

@property (nonatomic, assign) IBInspectable UIColor *borderColor;

在.m文件中

@implementation UIView (Inspectable)

- (void)setCornerRadius:(CGFloat)cornerRadius{

self.layer.cornerRadius = cornerRadius;

self.layer.masksToBounds = cornerRadius>0;

}

- (CGFloat)cornerRadius{

return self.layer.cornerRadius;

}

- (void)setBorderColor:(UIColor *)borderColor{

self.layer.borderColor = borderColor.CGColor;

}

- (UIColor *)borderColor{

return [UIColor colorWithCGColor:self.layer.borderColor];

}

- (void)setBorderWidth:(CGFloat)borderWidth{

self.layer.borderWidth = borderWidth;

}

- (CGFloat)borderWidth{

return self.layer.borderWidth;

}

@end

此時在storyboard中的Attribute Inspector就會多出三個配置選項(cornerRadius,borderColor,borderWidth)可以直接進行設置,界面如下


每次設置這三個選項之后,都會在Identity Inspector中改變一個rumtime的KVC變量,不過現(xiàn)在仍然不能動態(tài)的刷新

通過IB_DESIGNABLE配合IBInspectable可以實現(xiàn)動態(tài)刷新

實現(xiàn)方式很簡單,就是在自定義類的頭文件處加上這個宏定義即可。然后把對應的類設置為自定義的類。IB_DESIGNABLE修飾View,這個View是自定義的,其修飾的View可以直接在xib里面動態(tài)渲染

但是切記不能修飾分類,比如上邊提到的UIView的分類,如果把IB_DESIGNABLE加載此分類中是毫無作用的.可以自定義一個類,繼承自UITextField,然后在此類中添加這個宏定義,然后不要忘了和xib中的UITextfield相關聯(lián),這個時候,你再設置上邊的三個配置選項就會發(fā)現(xiàn)能夠動態(tài)刷新了.

如果不能動態(tài)刷新,重啟XCode,如果還不能刷新,如下圖RefreshingAllViews,建議開啟Automatically Refresh Views


最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 前言 在iOS開發(fā)過程中,我們經(jīng)常要根據(jù)項目需要自定義UI控件來完成一個特殊的功能(盡管UIkit框架已經(jīng)提供...
    拭目以待_閱讀 1,064評論 0 3
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,271評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,697評論 6 30
  • 在OC和Swift中使用IBDesignable/IBInspectable iOS8新特性IBDesignabl...
    潘柏信閱讀 2,604評論 3 5
  • 走過,路過,看過,聽過,瘋過,鬧過,哭過,笑過,來過。
    崔崔小姐閱讀 220評論 0 0

友情鏈接更多精彩內(nèi)容