美文网首页swift 学习记录
ios 报错"init(coder:) has not been

ios 报错"init(coder:) has not been

作者: Swift从入门到崩溃 | 来源:发表于2017-12-19 10:19 被阅读0次

当我们在使用nib进行页面布局的时候,在自定义的View类里面。会对页面进行初始化,和一系列的操作。一般我们通过nib创建的View,我们都会通过loadNibName来进行初始化:

 let nib = Bundle.main.loadNibNamed("LoginView", owner: nil, options: nil)
 let view = nib?.first as! LoginView

当我们这样去调用这个LoginView的时候,因为我们是使用的nib进行创建的View,所以系统会先调用 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进行创建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

相关文章

网友评论

    本文标题:ios 报错"init(coder:) has not been

    本文链接:https://www.haomeiwen.com/subject/nassbxtx.html