sulassing类型为.system的UIButton

时间:2017-05-24 09:56:54

标签: ios swift uibutton

我正在尝试子类化UIButton,但我希望它是类型.system。我正在努力与初始化者

class FormButton: UIButton {

var type FormButtonType: FormButtomType.oneSelection

init(oftype formType: FormButtomType) {
    self.type = formType
    super.init(type: .system)
}

} 

问题是我有以下错误消息:"必须调用超类的指定初始化程序' UIButton'

4 个答案:

答案 0 :(得分:1)

您无法覆盖便捷方法并调用超便捷方法...... 作为替代方法,您可以执行返回FormButton UIButtonType.system类型的静态方法。

class FormButton: UIButton {
    class func newButton() -> FormButton {
        return FormButton.init(type: .system)
    }
}

像这样使用

let button = FormButton.newButton()

答案 1 :(得分:0)

你需要呼叫超类'指定的初始化程序:

init(oftype formType: FormButtomType) {

    super.init(frame: yourframe)
    self.type = formType

}

答案 2 :(得分:0)

错误有点令人困惑

  

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

但它试图说的是你需要在使用self之前调用指定的初始化程序。因此,在self.type调用后转移super.init来电。您创建了一个convenience初始化工具,不需要拨打超级电话,您需要拨打self

首先,这一行在语法上是错误的。

 var type FormButtonType: FormButtomType.oneSelection

应该是

 var type: FormButtonType = FormButtomType.oneSelection

现在您可以轻松地将其子类化。

import UIKit

class FormButton: UIButton {

    var type: FormButtonType = FormButtomType.oneSelection

    // convenence initializer, simply call self if you have
    // initialized type
    convenience init(type: UIButtonType) {
        self.init(type: type)
    }

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

现在,如果您要初始化某些不具有默认值或可选值的属性,则需要override指定的初始值。

例如,

class FormButton: UIButton {

    var type: UIButtonType = UIButtonType.system
    var hello: String // property doesn't have initial value

    // This is designated initialiser
    override init(frame: CGRect) {
        self.hello = "Hello"

        super.init(frame: .zero)
    }

    convenience init(type: UIButtonType) {
        self.init(type: .system)
    }

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

答案 3 :(得分:0)

我猜测由于突出显示的动画行为,您需要System type。 如果是这样,您可以在override子类中Highlighted UIButton属性,如下所示:

var isHighlighted: Bool {
        didSet {
            // If you have images in your button, add them here same as the code below
            (self.isHighlighted && self.titleLabel != nil) ? (self.titleLabel!.alpha = 0.2) : (self.titleLabel!.alpha = 1.0)
        }
    }