Как я могу сделать так, чтобы мой Nib загружал мой настроенный подкласс UIScrollView?

StackOverflow https://stackoverflow.com/questions/835735

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

- (id)initWithCoder:(NSCoder *)aDecoder {
    [super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
    return [self initWithFrame:[self frame]];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top