2015-05-06 9 views
11

Я унаследовал проект, и я смущен тем, что такое определенный ключ. Мой вопрос в том, что такое styleName ключ Путь? это свойство для представления? Как узнать, какие ключи доступны?Что такое ключ Путь в пользовательских атрибутах времени выполнения?

Например, после того, как я выбрать UILabel из раскадровки я проверить инспектор, удостоверяющий личность, и в определенных пользователем выполнения атрибутов я вижу следующее:

enter image description here

Я попытался просвете главные-стили. plist, но не уверен, как он связан.

, когда я нажимаю на инспекторе атрибутов (в то же время сохраняя UILabel в раскадровке подсвечена) это то, что он выглядит следующим образом:

enter image description here

+0

Если нажать на кнопку "Проверить Attitributes" (сразу справа от "Удостоверение инспектора"), есть поле "StyleName"? – nhgrif

+0

Хорошо. Я пишу ответ. – nhgrif

ответ

22

Существует NSKeyValueCoding protocol, что многие из объектов в UIKit соответствует.

Один из методов в пределах NSKeyValueCoding - valueForKey: (и многие другие соответствующие методы, проверьте документацию, которую я связал).

Позвонив по объекту valueForKey:, мы можем во время выполнения получить свойства доступа, которые были установлены в построителе интерфейса.

Так, например, на этом лейбле, я мог бы сделать что-то вроде этого:

Objective-C:

NSString *style = [myLabel valueForKey:@"styleName"]; 

Swift:

let style = myLabel.valueForKey("styleName") 

Теперь я может захватить значение, установленное через Interface Builder и во время выполнения, я могу что-то сделать с меткой, исходя из того, какое значение wa здесь. Например, здесь я мог бы использовать конкретное «имя стиля» для конкретного дизайна ярлыка.

Если вы ищете проект для valueForKey или "styleName", вы, скорее всего, найдете, где это свойство используется и что с ним делается.


Чтобы следить за мой вопрос относительно атрибута инспектора, так как из Xcode 6, мы можем использовать свойство @IBInspectable создать свойства, которые будут отображаться в инспекторе Attributes (as seen here). Рассмотрим UIView расширение:

extension UIView { 
    @IBInspectable var borderColor : UIColor? { 
     set (newValue) { 
      self.layer.borderColor = (newValue ?? UIColor.clearColor()).CGColor 
     } 
     get { 
      return UIColor(CGColor: self.layer.borderColor) 
     } 
    } 
} 

Теперь, если мы посмотрим на инспектора атрибутов для любого UIView (или подкласса) в нашей раскадровке, мы увидим:

enter image description here

мы теперь имеют свойство «Цвет границы», доступное через Инспектор атрибутов, который обычно отсутствует.Причина я показываю этот инструмент, потому, что всякий раз, когда вы установите один из этих свойств с помощью инспектора атрибутов, то значение будет на самом деле хранится в виде одного из этих «User Defined Время воспроизведения Атрибуты»:

enter image description here

И всякий раз, когда это представление загружается из XIB в моем приложении, одна из первых вещей, которые произойдут, заключается в том, что мое свойство borderColor будет установлено на этот красный цвет, который я выбрал в Interface Builder.

0

спасибо nhgrif. На самом деле, благодаря вашему ответу, который был замечательным, плюс один я нашел, что происходит. Они создали глобальную категорию в UIView. его называют UIView + mystyle. там у них есть способ со следующей подписью:

- (void) setStyleName:(NSString*) styleName 

так Xcode использует этот метод не «набора» и соответствует его исполняемому ключевому атрибуту пути. в этом методе они применяют атрибут.

2

на основе определенного времени выполнения Apple doc

Использование атрибутов пользовательского установить начальное значение для объектов, которые не имеют интерфейса строитель инспектор. Например, если добавить следующие записи в инспекторе идентичности для пользовательского представления:

The image of runtime attributes

Обычай вид получит это сообщение, когда перо загружается:

[customView setValue:[NSNumber numberWithBoolean:NO] forKeyPath:@"isDataLoaded"]; 
[customView setValue:@"Hatha" forKeyPath:@"excersize.yoga"]; 
[customView setValue:nil forKeyPath:@"myData"]; 

Важно: свойство или путь ключа для определяемого пользователем времени выполнения атрибут должен существовать в объекте, иначе будет происходить исключение.

Потому что эти методы вызывается при загрузке nib. Таким образом, эти атрибуты времени выполнения могут быть получены внутри -(void)awakeFromNib.

Например,

- (void)awakeFromNib 
{ 
// @property (nonatomic) BOOL isDataLoaded, which is assigned by the above `User Defined Runtime Attributes` picture. 
    BOOL isLoaded = self.isDataLoaded; 
} 
4

Ниже приведен список доступных типов атрибутов и соответствующий тип недвижимости.

Boolean – BOOL (true/false) 
Number – NSNumber * or any numeric scalar, e.g. NSInteger 
String – NSString 
Point – CGPoint 
Size – CGSize 
Rect – CGRect 
Range – NSRange 
Color – UIColor 

Here Image Show How Can You Define User Defined Runtime Attributes