UIButton 子类在情节提要中崩溃

UIButton Subclass Crashes When in Storyboard

我有一个 UIButton 的子类,当我将按钮添加到故事板中的视图控制器时,我的应用程序崩溃并显示 fatalError("init(coder:) has not been implemented")。如果我在代码中手动添加子类按钮,它工作正常。我做错了什么?

import UIKit

class RAPanicButton: UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.layer.cornerRadius = self.frame.height / 2
        self.layer.masksToBounds = true
        self.clipsToBounds = true

        self.backgroundColor = .red
        self.setTitle("Panic!", for: .normal)
        self.titleLabel?.textColor = .white
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        fatalError("init(coder:) has not been implemented")
    }
}

故事板中的内容将通过调用 init(coder:) 初始化程序进行初始化。这意味着如果你想在故事板中使用你的视图,你不能在 init(coder:).

中抛出 fatalError

您可以在两个初始化程序中放入相同的代码:

func setup() {
    self.layer.cornerRadius = self.frame.height / 2
    self.layer.masksToBounds = true
    self.clipsToBounds = true

    self.backgroundColor = .red
    self.setTitle("Panic!", for: .normal)
    self.titleLabel?.textColor = .white
}

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}