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

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

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

Ответ 1

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

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

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

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

  • правописание имени класса совпадает с написанием (и случаем) файла nib
  • файл nib включен в проект, а не только в одном каталоге
  • ваш метод подкласса UIViewController также вызывает [super init]
  • вы вызываете свой метод подкласса UIViewController
  • вы действительно видите вид контроллера вида видимым

Ответ 2

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

Предполагая, что у вас есть ivar

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

Ответ 3

NSBundle loadNibNamed: