如何使用众多初始化程序在swift中创建自定义UIView类?

时间:2016-01-23 12:07:53

标签: swift uiview initialization

我试图坚持下去并学习它并在Swift中编写应用程序,而不是默认使用Obj-C,尽管我一直陷入非常简单的事情并且似乎无法在线找到我的答案。回归的诱惑力很强。这就是我想要做的。

class CircleView : UIView {

    var title: UILabel

    convenience init(frame: CGRect, title: String) {

    }

    override init(frame: CGRect) {
        self.title = UILabel.init(frame: CGRectMake(0.0, 0.0, frame.size.width, frame.size.height))
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("CircleView is not NSCoding compliant")
    }
}

我的目标是什么......创建CircleView实例的人必须同时提供框架和字符串。我怎么做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为你非常接近。便利初始化程序可以设置标签,然后调用指定的初始化程序:

class CircleView : UIView {

    var title: UILabel

    convenience init(frame: CGRect, title: String) {
        self.init(frame: frame)
        self.title.text = title
    }

    override init(frame: CGRect) {
        self.title = UILabel.init(frame: CGRectMake(0.0, 0.0, frame.size.width, frame.size.height))
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("CircleView is not NSCoding compliant")
    }
}

这里唯一需要注意的是,有人仍然可以直接调用指定的初始化程序,而无需为标签提供文本。如果您不想允许,我相信您可以将指定的初始化程序设为私有,即:

private override init(frame: CGRect) { ... }