我知道有很多相關的問題,爲什麼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