动态预览Xib的实现

版权所有,禁止匿名转载;禁止商业使用。

今天看了一篇介绍Xcode6的新功能,动态预览Xib的文章,做了个Demo试验下,这里写下总结备用。


写一个TestView继承于UIView,然后写个对应的xib,把xib的名字设置成TestView,这是标准的用xib加载这个view必须得条件


然后xib里把这个View的backgroundColor设置为黑色,恩,看起来就是黑色的。


jYNRFf.png

如果想要把背景色改为棕色或者更复杂的事情,那么就需要改代码然后编译运行看效果,那么本文章介绍的新功能就是打破这个僵局的。


在TestView类前面写@IBDesignable,且一定要保证实现initWithFrame和initWithCoder方法,因为预览会调用initWithFrame,且ib加载会调用initWithCoder,两者一定要实现,还要实现prepareForInterfaceBuilder方法来改变一些属性,如下


import UIKit
@IBDesignable
class TestView: UIView {
  override init(frame: CGRect) {
    super.init(frame: frame)
  }
  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }
  //这个方法是Xib加载显示前会调用的方法,这里设置默认值用来显示Xib前的最后一道管卡
  override func prepareForInterfaceBuilder() {
    self.backgroundColor = UIColor.brownColor()
  }
}

然后看TestView.xib会神奇的发现上面显示building,然后画面变成了棕色,但是IB设置还是之前的黑色


rQZrUnI.png

那么,这么修改只能是第一次启动的时候预览Xib,我们可以设定一个属性放在Xcode的右边栏,这样可以实时的修改这个属性预览,方法是使用@IBInspectable,比如还是背景色这个属性,下面将会把bgColor这个属性放到右边栏去


注释掉prepareForInterfaceBuilder,然后添加下面两个方法给TestView


@IBInspectable
    var bgColor: UIColor? {
  didSet {
      refreshColor()
  }
    }
    private func refreshColor() {
  if let realColor = bgColor {
      self.backgroundColor = realColor
  }
    }

这样的话bgColor这个属性就跑到右面去了,就可以实时修改背景色了


RbAR7bB.png

此外,XIB视图预览还可以设置断点,方法是代码里设置断点,然后Editor -> Debug Selected Views(以前是automatic那个),比如在修改背景色那里设置断点,再修改背景色就会断在那里了,暂时就这些


0 0