gpt4 book ai didi

ios - UIView 可以在初始化后加载另一个 Nib 吗?

转载 作者:行者123 更新时间:2023-11-28 15:06:59 24 4
gpt4 key购买 nike

只是一个满足我好奇心的问题。使用 nib 初始化后的 UIView 能否再次加载另一个 nib?

例如,这是我用某个 Nib 初始化我的 View 的地方:

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 吗?

最佳答案

毫无疑问,覆盖初始化器来设置初始值以设置类变量(包括 UIViews)的默认值将是一个好主意,但是当涉及到添加 subview 时,我建议在 awakeFromNib() 中进行方法:

Prepares the receiver for service after it has been loaded from an Interface Builder archive, or nib file.

The nib-loading infrastructure sends an awakeFromNib message to each object recreated from a nib archive, but only after all the objects in the archive have been loaded and initialized. When an object receives an awakeFromNib message, it is guaranteed to have all its outlet and action connections already established.

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

因此:

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

关于ios - UIView 可以在初始化后加载另一个 Nib 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48290417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com