Я пишу пользовательское представление с двумя метками в качестве подпредставлений - titleLabel
и subtitleLabel
.
Я добавил два @IBInspectable
свойства с именами titleText
и subtitleText
, чтобы я мог очень легко устанавливать тексты меток в раскадровке.
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
свойств, которые я могу переопределить для инициализации подпредставлений?