Как загрузить XIB? - PullRequest
       35

Как загрузить XIB?

11 голосов
/ 19 сентября 2009

У меня есть приложение с 2 экранами (MainViewController и AboutViewController). После того, как пользователь нажмет кнопку, я бы хотел загрузить экран AboutViewController, который определен в другой XIB.

Кажется простым, но я не могу найти свое гугл-фу сегодня. Как мне это осуществить?

Ответы [ 3 ]

30 голосов
/ 19 сентября 2009

Когда вы звоните [AboutViewController init], ожидается, что он вызовет некоторую форму [super init], что является синонимом [UIViewController init]. Когда это происходит, ваш контроллер представления автоматически ищет файл пера, называемый (в вашем случае) AboutViewController.xib. Если он находит этот файл, он загружает его содержимое в ваш контроллер представления.

В общем, все, что вам нужно сделать, это инициализировать ваш контроллер представления и убедиться, что он имеет то же имя, что и связанный файл пера.

Если вы хотите загрузить файл пера с другим именем в контроллер представления, вы можете явно вызвать initWithNibName:bundle: с именем любого файла пера, который вам нравится.

Если стандартный init (с одноименным nib-файлом) у вас не работает, есть пара вещей, которые вы можете проверить.

  • написание имени класса совпадает с написанием (и регистром) файла пера
  • файл пера включен в проект, а не просто сидит в том же каталоге
  • метод init вашего подкласса UIViewController также вызывает [super init]
  • вы вызываете метод инициализации вашего UIViewController подкласса
  • вы действительно делаете вид контроллера вашего вида видимым
11 голосов
/ 21 сентября 2009

С экраном About вы, вероятно, просто хотите показать представление, а затем закрыть его. Поэтому вместо использования совершенно нового контроллера представления вы можете просто охватить текущее представление.

Если у вас есть ивар

UIView *aboutUsView;

с соответствующим свойством.

На ваш взгляд, контроллер делает:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items
[self.view addSubview:aboutUsView];  // Retains the view
[aboutUsView release];

Чтобы удалить представление, скажем, в действии, связанном с кнопкой на представлении, выполните:

[aboutUsView removeFromSuperview], aboutUsView = nil;  // Releases the view
0 голосов
/ 19 сентября 2009

NSBundle loadNibNamed:

...