我知道在实例化某些视图时为什么awakeFromNib
不调用许多相关问题。从 Nib 唤醒某个视图的消息被发送到视图本身,并且该消息不会传递给文件的所有者。我看到了为什么我的 awakeFromNib 不会着火?.
那么,如果你创建一个视图的实例,它的文件所有者本身就在 xib 文件中,会发生什么?
换句话说,您有自己的自定义视图,名为 MyCustomView.swift 和 MyCustomView.xib。在 xib 文件中,您将文件的所有者设置为MyCustomView
. 那么,当您创建 的实例时MyCustomView
,awakeFromNib
会调用吗?就我而言,awakeFromNib
似乎没有被调用。但是,视图本身确实是实例化的。所以,对我来说,awakeFromNib
没有被调用是很奇怪的。
谁能解释一下这件事?
仅供参考:我准备好了BaseCustomView.swift
。
BaseCustomView
有两个init
。
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
和
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
而且commonInit()
是这样的。
private func commonInit() {
// load custom view's xib
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: self.className(), bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
addSubview(view)
// make custom view's size the same size with itself
view.translatesAutoresizingMaskIntoConstraints = false
let bindings = ["view": view]
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|",
options:NSLayoutFormatOptions(rawValue: 0),
metrics:nil,
views: bindings))
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|",
options:NSLayoutFormatOptions(rawValue: 0),
metrics:nil,
views: bindings))
}
而 customView 只是覆盖 this 的类BaseCustomView
。另外,customView 的 File 的 Owner 就是customView
它自己。
更多编辑:自定义视图类是这样的。实际上awakeFromNib()
没有调用。
final class MyCustomView: BaseCustomView {
override func awakeFromNib() {
// do something
}
}