Ответ 1
Существует NSKeyValueCoding
protocol, который соответствует многим объектам внутри UIKit
.
Один из методов в NSKeyValueCoding
- valueForKey:
(и многие другие соответствующие методы, проверьте связанную документацию).
Вызывая valueForKey:
для объекта, мы можем во время выполнения получить свойства доступа, которые были установлены в построителе интерфейса.
Так, например, на этом ярлыке я мог бы сделать что-то вроде этого:
Objective-C:
NSString *style = [myLabel valueForKey:@"styleName"];
Swift:
let style = myLabel.valueForKey("styleName")
Теперь я могу захватить значение, установленное через Interface Builder и во время выполнения, я могу сделать что-то с меткой, основываясь на том, какое значение было установлено здесь. Например, здесь я мог бы использовать конкретное "имя стиля" для создания ярлыка определенным образом.
Если вы ищете проект для valueForKey
или "styleName"
, вы, скорее всего, найдете, где это свойство используется и что делается с ним точно.
Чтобы узнать о моем вопросе об инспекторе атрибутов, начиная с Xcode 6, мы можем использовать свойство @IBInspectable
для создания свойств, которые будут отображаться в Инспекторе атрибутов (as см. здесь). Рассмотрим это расширение UIView
:
extension UIView {
@IBInspectable var borderColor : UIColor? {
set (newValue) {
self.layer.borderColor = (newValue ?? UIColor.clearColor()).CGColor
}
get {
return UIColor(CGColor: self.layer.borderColor)
}
}
}
Теперь, если мы посмотрим на инспектор атрибутов для любого UIView
(или подкласса) в нашей раскадровке, мы увидим следующее:
Теперь у нас есть свойство "Цвет границы", доступное через Инспектор атрибутов, который обычно отсутствует. Причина, по которой я указываю этот инструмент, заключается в том, что всякий раз, когда вы устанавливаете одно из этих свойств через Инспектор атрибутов, вы установили фактически определенное значение в качестве одного из этих "Атрибутов, определяемых пользователем":
И всякий раз, когда это представление загружается из XIB в моем приложении, одна из первых вещей, которые произойдут, заключается в том, что мое свойство borderColor
будет установлено на этот красный цвет, который я выбрал в построителе интерфейса.