在OC和Swift中使用IBDesignable/IBInspectable

iOS8新特性IBDesignable/IBInspectable,能够直接在XIB或者Storyboard中直接,设置UI类的属性。
例如:UIView.layer.borderWidth、borderColor、cornerRadius这些属性在XIB上是不能直接设置的,可是IBDesignable/IBInspectable,利用运行时机制,就能够把这些属性映射到XIB上了,同时咱们UI类的自定义属性也能够映射上去。关于过多的解释我就很少说了能够看看Nate Cook撰写的。bash

以UIView的子类为例:

Swift IBDesignable/IBInspectable

首先咱们得建一个ViewSwift类,View继承自UIView,选择Swift语言。atom

@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

而后点击旁边的属性编辑,就能够看到咱们动态加载上去的属性,直接修改就能够了,XIB上的View也会跟随变化。

咱们就能够看到一个UIView的子类变成了这样
spa

Objective-C IBDesignable/IBInspectable

建一个ViewOC类,ViewOC继承自UIView,选择Objective-C语言,在.h里面声明属性3d

@property (nonatomic, assign)IBInspectable CGFloat cornerRadius;
@property (nonatomic, assign)IBInspectable CGFloat bwidth;
@property (nonatomic, assign)IBInspectable UIColor *bcolor;

注意:IBInspectable修饰的位置。code

而后再.m文件里面,@implementation前面用IB_DESIGNABLE修饰。继承

IB_DESIGNABLE
@implementation ViewOC

而后再set方法里面去赋值就OK了,以下:token

- (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是同样的,若是有疑问和建议,欢迎指导和提问。ip

相关文章
相关标签/搜索