2009-09-19 4 views
11

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

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

ответ

30

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

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

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

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

  • написание имени класса является таким же, как правописание (и случай) файла СИБ
  • файл СИБ включен в проект, а не просто сидеть в той же директории
  • ваш метод инициализация UIViewController подкласса это также называют [super init]
  • вы вызываете метод инициализации вашего UIViewController подкласса
  • вы действительно делаете вид вашей точки зрения контроллера видимого
+4

Я понятия не имел, XIBs не были автоматически загружены как это. Благодаря! – DOOManiac

11

С экраном 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

Он специально сказал, что у него есть два контроллера вида: «MainViewController и AboutViewController», а не контроллер просмотра и вид. – mahboudz

+5

Правильно. И я специально сказал, что ему может не понадобиться оба из них для достижения поставленной цели. –

+0

Это кажется очевидным методом. – user1432813