UIView可以在初始化后加载另一个笔尖吗?

时间:2018-01-16 21:52:49

标签: ios swift uiview

只是一个能够满足我的好奇心的问题。 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吗?

1 个答案:

答案 0 :(得分:1)

毫无疑问,重写初始化程序以设置初始值以设置类变量(包括UIViews)的默认值将是一个好主意,但是当提到子视图时,我建议在{ {3}}方法:

  

从接收器加载后准备接收器以进行维修   Interface Builder存档或nib文件。

     

nib加载基础结构向每个基础结构发送awakeFromNib消息   从nib存档重新创建的对象,但仅在中的所有对象之后   已加载并初始化存档。当对象收到时   一个awakeFromNib消息,保证其所有插座和   行动关系已经建立。

似乎是在其中添加子视图的更合适的方法;例如,假设子视图应该在主视图中具有其他组件的约束,您需要保证已经建立了所有组件。

因此:

override func awakeFromNib() {
    super.awakeFromNib()
    selfInit()
}