Ios 如何使用IBInspectable控制子视图的属性?

Ios 如何使用IBInspectable控制子视图的属性?,ios,swift,uiview,Ios,Swift,Uiview,我正在编写一个自定义视图,其中有两个标签作为子视图-titleLabel和subtitleLabel 我添加了两个名为titleText和subtitleText的@IBInspectable属性,这样我就可以很容易地在情节提要中设置标签的文本 class MyView : UIView { var titleLabel: UILabel! var subtitleLabel: UILabel! @IBInspectable var titleText: Str

我正在编写一个自定义视图,其中有两个标签作为子视图-
titleLabel
subtitleLabel

我添加了两个名为
titleText
subtitleText
@IBInspectable
属性,这样我就可以很容易地在情节提要中设置标签的文本

class MyView : UIView {
    var titleLabel: UILabel!
    var subtitleLabel: UILabel!

    @IBInspectable
    var titleText: String? {
        get { return titleLabel.text }
        set {
            titleLabel.text = newValue
            let fontSize = // calculates appropriate font size for the text...
            titleLabel.font = font.withSize(fontSize)
        }
    }

    @IBInspectable
    var subtitleText: String? {
        get { return subtitleLabel.text }
        set {
            subtitleLabel.text = newValue
            let fontSize = // calculates appropriate font size for the text...
            subtitleLabel.font = font.withSize(fontSize)
        }
    }

    override func draw(_ rect: CGRect) {
        // here I make the view look prettier, irrelevant to the question
    }
}
现在我需要初始化这两个标签,并将它们添加为
MyView
的子视图。我想我可以在
awakeFromNib
中这样做:

override func awakeFromNib() {
    titleLabel = UILabel(frame: CGRect(
        x: ...,
        y: ...,
        width: ...,
        height: ...))
    self.addSubview(titleLabel)
    subtitleLabel = UILabel(frame: CGRect(
        x: ...,
        y: ...,
        width: ...,
        height: ...))
    self.addSubview(subtitleLabel)

}
因此,我在故事板中添加了一个
MyView
,并使用属性检查器设置了它的属性,然后运行了这个应用程序。它坠毁了

显然,
IBInspectable
属性是在
awakeFromNib
之前设置的,因此此时标签尚未初始化

这意味着我需要在设置
IBInspectable
属性之前调用的方法中初始化标签


在设置可以重写以初始化子视图的
IBInspectable
属性之前调用的方法是什么?

这可能很明显,但将这些内容放入的正确方法是初始化器

此外,在您的具体情况下,没有真正的理由选择期权:

let titleLabel: UILabel = UILabel()

您可以将标签添加为子视图,并在以后更新框架。

成功了!我一直认为我需要在
init(来自aDecoder)
中初始化我的属性!这就是为什么我从未想过使用
init
let titleLabel: UILabel = UILabel()