2009-09-23 1 views
2

Каков правильный способ установки значения по умолчанию для свойства подкласса UIView?Свойства подкласса UIView по умолчанию

Хотя я еще не использую их, если XIB предоставляет значение, которое я хотел бы переопределить по умолчанию. Но если XIB не дает значения, я бы хотел, чтобы мое значение по умолчанию.

В этом случае я думаю о значении CGFloat. Хотя он может быть установлен на 0.0, это не является полезным значением по умолчанию, поэтому проверка значения 0.0 в моем коде и замена его лучшим значением - это то, что я бы предпочел избежать.

+0

Что недвижимости? У UIView много. – mahboudz

+0

О, мой плохой. Пользовательское свойство подкласса. В этом случае это называется 'lineWidth'. –

ответ

6

Внесите initWithFrame: в свой подкласс и установите там свойство.

- (id)initWithFrame:(CGRect)aRect { 
    if (self = [super initWithFrame:aRect]) { 
     // Set whatever properties you want. For example... 
     self.alpha = 0.75; 
    } 
    return self; 
} 

Этот назначенный инициализатор выполняется только в том случае, если представление построено в коде. Если представление происходит из файла nib, оно будет инициализировано с помощью initWithCoder :, которое изменяет атрибуты, соответствующие атрибутам в файле nib. Чтобы справиться с этим делом можно переопределить initWithCoder :, тест, чтобы увидеть, если атрибут установлен в значение по умолчанию, и если да, то изменить его:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     if (self.alpha == 1.0) { 
      self.alpha = 0.20; 
     } 
    } 
    return self; 
} 
+1

Не рекомендует ли Apple против использования аксессуаров в методах init? – lnafziger

1

Если это ваше собственное пользовательское свойство, то XIB следует установить его до нуля.

Поэтому, как сказал @cduhn, вы можете изменить его в:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     lineWidth = 12; // whatever value you want 
    } 
    return self; 
}