我知道有很多相关的问题,为什么awakeFromNib
在实例化某些视图时未被调用。 某些视图从Nib唤醒的消息被发送到视图本身,并且此消息未传递给文件所有者。 我看到了Why won't my awakeFromNib fire?。处理文件的所有者对象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只是覆盖此BaseCustomView
的类。 另外,customView的文件所有者本身是customView
。编辑: 自定义视图类是这样的。实际上并没有调用awakeFromNib()
。
final class MyCustomView: BaseCustomView {
override func awakeFromNib() {
// do something
}
}
你能告诉你如何实例化MyCustomView吗?我想如果你直接创建一个'MyCustomView.swift'的实例,它将不会被调用,一些'init'将被调用。 – zero
我展示了几乎所有的代码,请参阅。 –
在你显示的代码中没有'awakeFromNib'的实现。因此说它没有被调用是没有意义的。它没有被叫,因为它不在那里。或者,如果它在那里,_show_它(并显示“there”在哪里)。 – matt