ios 報錯"init(coder:) has not been implemented"

當我們在使用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
}

這樣就可以避免這個問題了

參考鏈接:http://blog.csdn.net/vistadk/article/details/54881813

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容