如何使用loadNibNamed加载视图时在UIView上调用Convenience Initialiser?

时间:2017-03-18 08:30:53

标签: ios iphone swift uiview swift3

如何调用从.xib文件加载的视图的便捷初始化程序? 我的初始化定义如下:

class CustomView : UIView{
    var prop1:Int
    var prop2:Int
    convenience init(prop1:Int, prop2:Int, frame:CGRect){
        self.prop1 = prop1
        self.prop2 = prop2
        super.init(frame:frame)
    }
}

现在,如果我想从其关联的.xib文件中实例化customView,我该如何执行此初始化程序

Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)?.first as! CustomView

感谢。

1 个答案:

答案 0 :(得分:0)

正如@Paulw所说,你做不到。从xib / storyboard加载的视图始终使用init(coder:)进行初始化。 UIView reference州:

  

重构nib文件中的对象,然后使用初始化   他们的init(编码器:)方法,它修改了视图的属性   匹配存储在nib文件中的属性。

如果要在Interface Builder中设置自定义视图,并且要设置自定义属性,则可以创建这些属性IBInspectable

class CustomView: UIView {

    @IBInspectable var prop1: Int
    @IBInspectable var prop2: Int

}

然后,当您在Interface Builder中选择该视图时,您将在Attributes检查器中看到它们(确保首先在Identity检查器中将Class设置为您的类的名称。)

Interface Builder Attributes Inspector showing IBInspectable properties

NSHipster有一篇关于IBInspectable here的精彩文章。