Подклассификация UIView. метод init никогда не называется
У меня есть UIView
в построителе интерфейса. На мой взгляд, у контроллера есть IBOutlet MyUIView
, который указывает на UIView
на построителе интерфейса.
Я изменил класс UIView
на "MyUIView
" (пользовательский класс UIView), но похоже, что ни один из методов init
подкласса не запущен.
Что я делаю неправильно?
Ответы
Ответ 1
Вместо init
вам нужно сначала позвонить initWithCoder
, затем вызвать init
как:
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self baseClassInit];
}
return self;
}
- (void)baseClassInit {
//initialize all ivars and properties
}
Ответ 2
Короткий ответ: вам нужно использовать initWithCoder:
.
Из initWithFrame:
docs:
Если вы используете Interface Builder для проектирования вашего интерфейса, этот метод не вызывается, когда ваши объекты просмотра впоследствии загружаются из файла nib. Объекты в файле nib восстанавливаются и затем инициализируются с использованием их метода initWithCoder:, который изменяет атрибуты представления в соответствии с атрибутами, хранящимися в файле nib.
Если вы используете файл nib/xib/Storyboard, используйте initWithCoder:
. Если вы создаете свой вид программно, вы можете использовать init
или initWithFrame:
.