2009-05-07 11 views
3

У меня был хороший UIScrollView внутри моего наконечника, который работал красиво. Тогда у меня были особые потребности и подклассы UIScrollView. В моем Nib я сменил класс в инспекторе идентификации на мой подкласс.Как правильно настроить загрузку Nib в моем подклассе UIScrollView?

Но по какой-то причине мой -initWithFrame: метод никогда не вызывается, когда загрузчик nib создает все те объекты из nib. На самом деле я не изменил ничего прямо сейчас в моем подклассе. И просмотр прокрутки просто отлично работает. Ожидайте, что это, кажется, пустой UIScrollView, даже если я сказал nib, он должен быть SpecializedUIScrollView для целей тестирования.

Есть ли что-то еще, что я должен учитывать при подклассификации UIScrollView при использовании файла Nib, чтобы привести его в перспективе?

Мой преданный инициализатора выглядит следующим образом:

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     NSLog(@"Hello !!!!!!!!!!!!!"); 
    } 
    return self; 
} 

Я никогда не видел, что Привет в консоли, если я пытаюсь загрузить его из СИБ. Конечно, если я сам выделил и инициализировал это, он будет работать. Но я не хочу позиционировать свой просмотр прокрутки программно, если я могу использовать этот проклятый классный Builder.

ответ

3

Объекты в наконечнике или xib хранятся в виде сериализованных объектов, это может означать, что вы должны использовать метод awakeFromNib, потому что методы init никогда не вызываются.

+0

Это сработало! Благодаря! – Thanks

1

Продление initWithCoder, обязательно вызовите метод super. Именно во время этого супервызова setFrame будет вызван на ваш класс.

Вы можете повторно использовать стандартный initWithFrame вызов в initWithCoder, а интерфейс строитель будет контролировать размер кадра.

- (id)initWithCoder:(NSCoder *)aDecoder { 
    [super initWithCoder:aDecoder]; // Required. setFrame will be called during this method. 
    return [self initWithFrame:[self frame]]; 
}