Ответ 1
В ваших целях вы можете использовать либо определенные пользователем атрибуты времени выполнения, либо раскрывать свой класс и свойства как редактируемые в Interface Builder. В любом случае, вы захотите объявить свои свойства как неявно развернутые. Необязательные переменные - IBOutlets
создаются одинаково. Если вам нужно внести другие изменения после того, как ваши свойства имеют значение, дайте им didSet
наблюдателям свойств. Во время инициализации свойства будут иметь значение по умолчанию (или nil
, если не было установлено по умолчанию) и установить, когда представление добавлено в супервизор.
Пользовательские атрибуты времени выполнения
Это работает более или менее, как описано выше - вот простейшая версия:
class LabeledView : UIView {
var viewLabel: String! {
didSet {
println("didSet viewLabel, viewLabel = \(self.viewLabel)")
}
}
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
println("init with coder, viewLabel = \(self.viewLabel)")
}
}
Затем установите для атрибута viewLabel
значение "Hello" в представлении в вашем раскадровке, например:
Когда вы создаете и запускаете, консоль покажет, что свойство задано правильно:
init with coder, viewLabel = nil
didSet viewLabel, viewLabel = Hello
@IBDesignable и @IBInspectable
Это дает вашему пользовательскому представлению гораздо более удобный интерфейс в IB - установите атрибут @IBDesignable
в свой класс и атрибуты @IBInspectable
для каждого свойства. Здесь тот же класс:
@IBDesignable class LabeledView : UIView {
@IBInspectable var viewLabel: String!
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
}
Теперь вы можете установить свои проверяемые свойства в верхней части Инспектора атрибутов в построителе интерфейсов: