swift 学习记录

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

2017-12-19  本文已影响0人  Swift从入门到崩溃

当我们在使用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

上一篇 下一篇

猜你喜欢

热点阅读