Где init * действительно * происходит в UIView, размещенном в Интерфейсном Разработчике? - PullRequest
2 голосов
/ 25 января 2011

У меня есть подкласс UIView, который называется SlideOut.Я хочу зафиксировать размещение представления IB при загрузке, поэтому у меня есть это в моей реализации:

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
    IBframe.origin.x = frame.origin.x;
  IBframe.origin.y = frame.origin.y;
  IBframe.size.height = frame.size.height;
     IBframe.size.width = frame.size.width;
        // Initialization code.
  NSLog(@"init if self x: %f, y: %f", IBframe.origin.x, IBframe.origin.y);
    }
 NSLog(@"init x: %f, y: %f", IBframe.origin.x, IBframe.origin.y);
    return self;
}

... с соответствующим прототипом в файле .h.

После запуска симулятора я получаю все остальные диагностические сообщения, но ни одно из этих сообщений журнала не вызывается.Так как же экземпляр на самом деле инициализируется?Или я что-то упустил?Функция положения работает, но затем терпит неудачу, потому что я не захватил фактический кадр вещи.В любом случае я знаю, что правильно установил соединения IB.

Ответы [ 3 ]

11 голосов
/ 25 января 2011

Посмотрите здесь: Подкласс UIView, "Методы для переопределения", из ссылки на класс UIView .

В частности:

initWithCoder: - Реализацияэтот метод, если вы загружаете ваше представление из файла пера Interface Builder, и ваше представление требует пользовательской инициализации.

5 голосов
/ 25 января 2011

Объекты, загруженные из XIB, на самом деле не архивируются.Таким образом, вы должны использовать метод initWithCoder:.Кроме того, вместо этого вы можете посмотреть на awakeFromNib.

3 голосов
/ 25 января 2011

Я считаю, что функция, которая вызывается при загрузке представления из NIB, имеет значение initWithCoder, а не initWithFrame

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...