添加自定义UIButton以编程方式致命错误

时间:2016-07-01 16:57:25

标签: ios swift uibutton

我正在使用以下代码创建自定义圆形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
        }

    }

2 个答案:

答案 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
}