Подтвердить что ты не робот

Подклассификация UIView. метод init никогда не называется

У меня есть UIView в построителе интерфейса. На мой взгляд, у контроллера есть IBOutlet MyUIView, который указывает на UIView на построителе интерфейса.

Я изменил класс UIView на "MyUIView" (пользовательский класс UIView), но похоже, что ни один из методов init подкласса не запущен.

Что я делаю неправильно?

4b9b3361

Ответ 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:.