Фон
Я использую конструктор интерфейсов для создания пользовательского интерфейса для приложения, над которым я работаю. Приложение имеет один экран, на котором отображается ряд кнопок. При нажатии на кнопку отображается связанное с ней представление, которое накладывается на кнопки. При нажатии на другую кнопку предыдущее наложенное представление скрывается и отображается другое.
Чтобы упростить управление пользовательским интерфейсом в IB, я решил создать несколько nib-файлов для каждого вложенного представления, которое должно появляться при нажатии на соответствующую кнопку. Затем я загружаю nib-файл вложенного представления в методе viewDidLoad
контроллера представления, используя класс UINib
.
Идея этого заключалась в том, чтобы избежать множества представлений, сложенных друг на друга в одном nib-файле, так как этим было бы трудно манипулировать в IB. Я мог бы создать все представления в коде, но это потребовало бы много утомительного кодирования, поскольку макеты каждого вложенного представления довольно сложны (с несколькими дочерними представлениями).
Пример кода загрузки вложенного представления из nib-файла.
- (void)viewDidLoad
{
UINib *aSubViewNib = [UINib nibWithNibName:@"aSubView" bundle:nil];
NSArray *bundleObjects = [aSubViewNib instantiateWithOwner:self options:nil];
// get root view from bundle array
UIView *aSubView = [bundleObjects objectAtIndex:0];
[self.view addSubview:aSubView];
...
Приведенный выше код повторяется для других представлений.
Подводя итог, можно сказать, что у меня есть одноэкранное приложение для iPhone, которое имеет многоуровневые представления, которые отображаются/скрываются при нажатии на кнопки. Это достигается с помощью одного контроллера представления с соответствующим nib-файлом и серией дополнительных nib-файлов для вложенных представлений, которые загружаются в методе viewDidLoad контроллера представления.
Вопросы!
Извините за длинное вступление, но я хотел бы четко понять, что именно я делаю.
Примечания
Прежде чем кто-нибудь спросит, почему бы мне просто не отобразить вложенные представления на новом экране и не использовать навигационную панель, позвольте мне сказать, что у меня есть очень веские причины, и я понимаю руководящие принципы iOS UI. Приведенный выше пример использования не совсем мой, но он четко описывает проблему, не увязая в моей разработке приложения.
Также я знаю, что мог бы написать все вложенные представления в виде кода, но каждое вложенное представление имеет сложный макет дочерних представлений, и это было бы много кода и возни, чтобы попытаться заставить их выглядеть правильно.
Заранее спасибо.