Вопрос
У меня есть приложение с 2 экранами (MainViewController и AboutViewController).Когда пользователь нажимает кнопку, я хотел бы загрузить экран AboutViewController, который определен в другом XIB.
Кажется простым, но, похоже, сегодня я не могу найти свой google-fu.Как мне это провернуть?
Решение
Когда ты позвонишь [AboutViewController init]
, ожидается , что это вызовет некоторую форму [super init]
, который является синонимом [UIViewController init]
.Когда это произойдет, ваш контроллер просмотра автоматически выполнит поиск файла nib, вызываемого (в вашем случае) AboutViewController.xib
.Если он находит этот файл, он загружает его содержимое в ваш контроллер просмотра для вас.
Итак, по сути, все, что вам нужно сделать, это инициализировать ваш view controller и убедиться, что у него то же имя, что и у связанного файла nib.
Если вы хотите загрузить файл nib с другим именем в свой контроллер представления, вы могли бы явно вызвать initWithNibName:bundle:
с именем любого файла nib, который вам нравится.
Если стандартная инициализация (с одноименным файлом nib) у вас не работает, есть пара вещей, которые вы могли бы проверить.
- написание имени класса совпадает с написанием (и регистром) файла nib
- файл nib включен в проект, а не просто находится в том же каталоге
- ваш
UIViewController
метод init подкласса также вызывает[super init]
- вы называете свой
UIViewController
метод инициализации подкласса - вы действительно делаете видимым представление вашего view controller
Другие советы
С помощью экрана "О программе" вы, вероятно, просто хотите показать представление, а затем отклонить его.Таким образом, вместо того, чтобы использовать совершенно новый контроллер представления, вы можете просто закрыть текущее представление.
Предполагая, что у вас есть ивар
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
NSBundle loadNibNamed с именем: