У меня есть подкласс UIView
под названием MyView
, который я создаю.
В нем есть UILabel
(это добавлено в код не в InterfaceBuilder по причинам).
Затем у меня есть свойство на MyView
под названием color
.
Я бы хотел, чтобы Interface Builder мог выбрать color
, а также затем отобразить метку со шрифтом, установленным на этот цвет.
В моем коде у меня есть...
@IBDesignable class MyView: UIView {
private let textLabel = UILabel()
@IBInspectable var color: UIColor = .blackColor() {
didSet {
textLabel.textColor = color
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialSetup()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialSetup()
}
private func initialSetup() -> Void {
self.backgroundColor = .clearColor()
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
addSubview(textLabel)
}
override func layoutSubviews() {
super.layoutSubviews()
textLabel.frame = bounds
}
// I have no idea what I'm doing here?!
override func prepareForInterfaceBuilder() {
// should I create a label specifically for here?
// or should I use the property textLabel?
textLabel.text = "Hello, world!" // setting place holder IB text?
textLabel.textColor = color
textLabel.font = .systemFontOfSize(21)
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
// do I need to add sub view?
}
}
IBInspectable
В IB я вижу свойство цвета и могу его установить. Досадно, что он принимает значение по умолчанию .clearColor(), хотя это не тот цвет, который я установил в коде. Есть ли способ исправить это?
IBDesignable
Когда я помещаю представление в InterfaceBuilder, оно показывает все проверяемые свойства, но в реальном представлении ничего не отображается.
Когда я запускаю его, все работает нормально. Я просто хотел бы, чтобы что-то работало (кроме drawRect) в IB. Однако я обнаруживаю явное отсутствие документации.
Изменить — Предупреждения
Я только что заметил, что получаю сообщения об ошибках/предупреждениях сборки...
предупреждение: IB Designables: игнорирование определенного пользователем атрибута времени выполнения для ключевого пути «цвет» в экземпляре «UIView». Вызовите исключение при попытке установить его значение: [setValue:forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для цвета ключа.
Это, вероятно, изменит решение :)