我正在寻找一种制作笔尖的方法,然后我可以在故事板中嵌入和重用,并且所有IBOutlets
都已正确实例化。我能够使用this tutorial的修改版本来实现它。
让它发挥作用的步骤是:
File's Owner
设置为自定义视图子类UIView
作为笔尖视图的直接后代(这是我们的内容视图)IBOutlet
的名为contentView
的视图类中创建UIView
,并将笔尖中的内容视图内容添加到该商店在awakeFromNib
中执行以下操作:
override func awakeFromNib() {
super.awakeFromNib() //call super
NSBundle.mainBundle().loadNibNamed("MyView", owner: self, options: nil)
self.contentView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(self.contentView)
self.addEdgeConstraintWithAttribute(.Left, withSubview: self.contentView)
self.addEdgeConstraintWithAttribute(.Top, withSubview: self.contentView)
self.addEdgeConstraintWithAttribute(.Right, withSubview: self.contentView)
self.addEdgeConstraintWithAttribute(.Bottom, withSubview: self.contentView)
}
这个过程运作正常,但我不明白如何运作。是否有更好的方法来实现同样的目标?
答案 0 :(得分:2)
这一切都来自awakeFromNib
NSNibAwaking
协议。
"为每个对象调用
-awakeFromNib
方法 在加载nib文件时实例化..." - e.James
让我们说,你创建了一个名为MyView
的类和笔尖并完成了上述所有步骤,现在当你在故事板中添加UIView
并将其类设置为{{1}时并运行该应用程序。这里发生了什么。
MyView
awakeFromNib
。MyView
会触发加载名为awakeFromNib
的笔尖。MyView
方法,您发送loadNibNamed
作为所有者,所以
当nib被取消归档并加载时,它会将所有self
设置为
已发送IBOutlets
,这就是您self
工作的原因,即IBOutlet
,因为contentView现在具有来自笔尖的视图。