當我們在使用nib進行頁面布局的時候,在自定義的View類里面。會對頁面進行初始化,和一系列的操作。一般我們通過nib創(chuàng)建的View,我們都會通過loadNibName來進行初始化:
let nib = Bundle.main.loadNibNamed("LoginView", owner: nil, options: nil)
let view = nib?.first as! LoginView
當我們這樣去調用這個LoginView的時候,因為我們是使用的nib進行創(chuàng)建的View,所以系統(tǒng)會先調用 init?(coder aDecoder: NSCoder),然后再調用 awakeFromNib()。所以我們在使用nib的時候,只用awakeFromNib()來初始化。如果你是使用了這樣的初始化方法:
override init(frame: CGRect) {
super.init(frame: frame)
loginBtn.layer.masksToBounds = true
loginBtn.layer.cornerRadius = 5
loginBtn.layer.borderColor = UIColor.red.cgColor
loginBtn.layer.borderWidth = 1
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
那么就會報錯"init(coder:) has not been implemented"。
所以在使用nib進行創(chuàng)建View的時候,我們就要使用如下的初始化方式:
override func awakeFromNib() {
super.awakeFromNib()
loginBtn.layer.masksToBounds = true
loginBtn.layer.cornerRadius = 5
loginBtn.layer.borderColor = UIColor.red.cgColor
loginBtn.layer.borderWidth = 1
}
這樣就可以避免這個問題了