2016-12-11 5 views
2

Я имею это в MyClass.h файле:IBInspectable свойство не имеет свое значение в initWithCoder: инициализатору

#import <UIKit/UIKit.h> 

IB_DESIGNABLE 

@interface MyClass : UIView 

@end 

и это код из файла .m:

-(void)awakeFromNib{ 
    [super awakeFromNib]; 

    NSLog(@"This works %lud",(unsigned long)self.max); 
} 

-(instancetype)initWithCoder:(NSCoder *)aDecoder{ 

    if ((self = [super initWithCoder:aDecoder])){ 

     NSLog(@"This doesn't work %lud",(unsigned long)self.max); 
    } 

    return self; 
} 

В awakeFromNib метод, я получаю правильное значение, установленное в IB. В initWithCoder: я получаю это значение равным нулю.

Какое время для проверки значения, установленного в IB, для этого свойства?

Это, как я определил свойство в файле .m:

@interface MyClass() 

@property (nonatomic) IBInspectable NSUInteger max; 

@end 

ответ

3

Вы, кажется, ответили на свой вопрос: awakeFromNib вместо initWithCoder:. awakeFromNib позже, и к тому времени были установлены атрибуты времени выполнения.

В реальной жизни, конечно, вам, вероятно, не понравится эта величина, пока мы не достигнем viewDidLoad, что значительно позже, чем .

+0

Спасибо. Ну, я еще не понял, каким будет самый удобный способ использования моего класса, но идея такова: 1) Перетащите представление в раскадровку (и установите свой собственный класс в MyClass), 2) Введите значения контролируемых свойств. Также на основе этих свойств я генерирую некоторый дополнительный контент в своем пользовательском представлении (это не все визуальное определение в IB). Итак, при инициализации моего представления мне нужны значения тех свойств, которые определены в IB. Если у вас есть какие-либо предложения или намеки на этот поток, я все уши. :) – Whirlwind

+0

Мой ответ остается тем же. Сделайте это в 'awakeFromNib', как вы уже вывели. Но то, что я хотел бы сделать, это подождать, пока контроллер представления не получит 'viewDidLoad'. Это происходит после создания представления, но до его ввода в интерфейс. Контроллер вида предположительно имеет ссылку на это представление, чтобы он мог сказать, что он завершил настройку. – matt

Смежные вопросы