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