如何在Swift 1.0中覆盖UIView初始化程序

时间:2014-09-16 20:33:33

标签: ios swift uiview

斯威夫特(1.0)继承让我疯狂无法相信。我可以相信必须要问一些简单的事情,但我无法弄明白。我有我的自定义视图,我希望能够使用init(frame:CGRect)以编程方式创建,以及从故事板加载它,在这种情况下应该使用init(coder aDecoder:NSCoder)进行初始化。在这两种情况下,我想调用我的自定义安装方法。像这样:

import UIKit

class CustomView: UIView {

    override convenience init(frame: CGRect) {
        super.init(frame: frame)
        self.myCustomSetup()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.myCustomSetup()
    }

    func myCustomSetup() {
        self.backgroundColor = UIColor.redColor()
    }
}

这似乎不起作用,从快速文档我明白应该只有一个指定的初始化程序,所有的便利初始化程序调用。在UIView的情况下,这应该是init(编码器aDecoder:NSCoder)。但是我无法在aDecoder: NSCoder中创建init(frame: CGRect)我也无法传递nil,因为它不是可选的。我该怎么办 ?我怎样才能覆盖它们?

1 个答案:

答案 0 :(得分:6)

一个类必须至少有一个指定的初始值设定项。它可能不止一个。

要使代码生效,您只需从convenience中删除关键字init(frame: CGRect)