不能子类UIButton:必须调用超类'UIButton'的指定初始值设定项

Cra*_*lot 9 uibutton ios swift

尝试子类化UIButton但Must call a designated initializer of the superclass 'UIButton'发生错误.

研究几个SO帖子是这样,这个,这个,或者几个人并没有帮助那些解决方案没有奏效.

我们如何UIButton在Swift中继承子类并定义自定义init函数?

import UIKit

class KeyboardButton : UIButton {
    var letter = ""
    var viewController:CustomViewController?

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

    init(letter: String, viewController: CustomViewController) {
        super.init()
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Aar*_*ger 14

你必须调用超类'指定初始值设定项:

Swift 3&4:

init(letter: String, viewController: CustomViewController) {
    super.init(frame: .zero)
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特1和2:

init(letter: String, viewController: CustomViewController) {
    super.init(frame: CGRectZero)
}
Run Code Online (Sandbox Code Playgroud)

正如Paulw11在评论中所说,除了作为使用委托模式的弱引用之外,视图通常不应该引用其控制器,这将提高可重用性.

  • 指定的初始化程序有一个非可选参数,因此无法在没有参数的情况下调用它.如果它让你感觉更好,`init()`只是一个方便的初始化程序,无论如何都调用`init(frame:CGRectZero)`. (4认同)