我正在使用以下代码创建自定义圆形UIButton。我想以编程方式添加此UIButton。当我尝试这样做时,iOS崩溃了。它在InterfaceBuilder中工作正常。
Xcode给我这个错误。
致命错误:init(编码器:)尚未实现:
我应该怎么做才能修复它?任何建议都会非常感激。
以下是我用于Round UIButton的代码。
import UIKit
@IBDesignable
class RoundButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
initWithCoder
override func awakeFromNib() {
setupView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupView()
}
func setupView() {
let radius = self.frame.size.height / 2
layer.cornerRadius = radius
}
}
答案 0 :(得分:1)
如果是我,我会完全避免使用初始化程序:
setupView
这样的事情应该有用。您从awakeFromNib
致电init(coder:)
,因此我认为无需从初始化程序中调用它。
如果您需要编写自己的required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
版本,那么这样简单的事情可能有用:
item1
答案 1 :(得分:1)
Interface Builder将您的故事板序列化,并在您的应用运行时将其解压缩。它总是会调用init(coder: )
来实现它:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// If your subclass has extra properties, initialize them here...
self.property1 = aDecoder.decodeIntegerForKey("property1")
self.property2 = aDecoder.decoddeObjectForKey("property2") as! String
}