在OC和Swift中使用IBDesignable/IBInspectable
iOS8新特性IBDesignable/IBInspectable午乓,可以直接在XIB或者Storyboard中直接,設(shè)置UI類的屬性烛芬。
例如:UIView.layer.borderWidth家凯、borderColor累澡、cornerRadius這些屬性在XIB上是不能直接設(shè)置的,但是IBDesignable/IBInspectable额嘿,利用運(yùn)行時機(jī)制瘸恼,就可以把這些屬性映射到XIB上了,同時我們UI類的自定義屬性也可以映射上去册养。關(guān)于過多的解釋我就不多說了可以看看Nate Cook撰寫的东帅。
以UIView的子類為例:
Swift IBDesignable/IBInspectable
首先我們得建一個ViewSwift類,View繼承自UIView球拦,選擇Swift語言靠闭。
@IBDesignable
class View: UIView {
? ? ? ? ? @IBInspectable var cornerRadius: CGFloat = 0.0 {
? ? ? ? ? ? ? ? ? didSet {
? ? ? ? ? ? ? ? ? ? ? ? ? ? layer.cornerRadius = cornerRadius
? ? ? ? ? ? ? ? ? ? ? ? ? ? layer.masksToBounds = true
? ? ? ? ? ? ? ? }
? ? ? ? ?}?
? ? ? ?@IBInspectable var borderColor: UIColor = UIColor() {
? ? ? ? ? ? ? ?didSet {
? ? ? ? ? ? ? ? ? ? ? layer.borderColor = borderColor.CGColor
? ? ? ? ? ? ? ?}
? ? ?}
? ? ? @IBInspectable var borderWidth: CGFloat = 0.0 {
? ? ? ? ? ? ? ? didSet {
? ? ? ? ? ? ? ? ? ? ?layer.borderWidth = borderWidth
? ? ? ? ? ? ? ? }
? ? ? }?
}
然后在XIB或Storyboard里面,拖一個UIView上去坎炼,把class改成自己定義的View
然后點(diǎn)擊旁邊的屬性編輯愧膀,就可以看到我們動態(tài)加載上去的屬性,直接修改就可以了谣光,XIB上的View也會跟隨變化扇调。
我們就可以看到一個UIView的子類變成了這樣
Objective-C IBDesignable/IBInspectable
建一個ViewOC類,ViewOC繼承自UIView抢肛,選擇Objective-C語言狼钮,在.h里面聲明屬性
@property (nonatomic, assign)IBInspectable CGFloat cornerRadius;
@property (nonatomic, assign)IBInspectable CGFloat bwidth;
@property (nonatomic, assign)IBInspectable UIColor *bcolor;
注意:IBInspectable修飾的位置。
然后再.m文件里面捡絮,@implementation前面用IB_DESIGNABLE修飾熬芜。
IB_DESIGNABLE
@implementation ViewOC
然后再set方法里面去賦值就OK了,如下:
- (void)setCornerRadius:(CGFloat)cornerRadius{
? ? ? ? ? ?_cornerRadius = cornerRadius;
? ? ? ? ? ?self.layer.cornerRadius? = _cornerRadius;
? ? ? ? ? ?self.layer.masksToBounds = YES;
}
- (void)setBcolor:(UIColor *)bcolor{
? ? ? ? ? _bcolor = bcolor;
? ? ? ? ? self.layer.borderColor = _bcolor.CGColor;
}
- (void)setBwidth:(CGFloat)bwidth {
? ? ? ?_bwidth = bwidth;
? ? ? ?self.layer.borderWidth = _bwidth;
}
效果跟上面Swift是一樣的福稳,如果有疑問和建議涎拉,歡迎指導(dǎo)和提問。