只是一个能够满足我的好奇心的问题。 UIView在使用nib进行初始化后,可以再次加载另一个笔尖吗?
例如,这是我使用某个笔尖初始化我的视图的地方:
private func selfInit(){
Bundle(for: type(of: self)).loadNibNamed(fileName, owner: self, options: nil)
self.addSubview(contentView)
}
override init(frame: CGRect){
super.init(frame: frame)
selfInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
selfInit()
}
我可以在使用Bundle(...)初始化nib之后再次更改Nib吗?
答案 0 :(得分:1)
毫无疑问,重写初始化程序以设置初始值以设置类变量(包括UIViews)的默认值将是一个好主意,但是当提到子视图时,我建议在{ {3}}方法:
从接收器加载后准备接收器以进行维修 Interface Builder存档或nib文件。
nib加载基础结构向每个基础结构发送awakeFromNib消息 从nib存档重新创建的对象,但仅在中的所有对象之后 已加载并初始化存档。当对象收到时 一个awakeFromNib消息,保证其所有插座和 行动关系已经建立。
似乎是在其中添加子视图的更合适的方法;例如,假设子视图应该在主视图中具有其他组件的约束,您需要保证已经建立了所有组件。
因此:
override func awakeFromNib() {
super.awakeFromNib()
selfInit()
}