Как я могу сделать так, чтобы мой Nib загружал мой настроенный подкласс UIScrollView? - PullRequest
3 голосов
/ 07 мая 2009

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

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

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

Мой выделенный инициализатор выглядит так:

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

Я никогда не вижу этот Hello в консоли, если я пытаюсь загрузить его из Nib. Конечно, если я выделю и инициализирую это сам, это работает. Но я не хочу позиционировать свой вид прокрутки программно, если я могу использовать этот чертовски крутой Интерфейсный Разработчик.

Ответы [ 2 ]

3 голосов
/ 07 мая 2009

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

1 голос
/ 30 апреля 2011

Расширить 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]];
}
...