Использование нескольких файлов nib с одним контроллером представления?

Фон

Я использую конструктор интерфейсов для создания пользовательского интерфейса для приложения, над которым я работаю. Приложение имеет один экран, на котором отображается ряд кнопок. При нажатии на кнопку отображается связанное с ней представление, которое накладывается на кнопки. При нажатии на другую кнопку предыдущее наложенное представление скрывается и отображается другое.

Чтобы упростить управление пользовательским интерфейсом в 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 контроллера представления.

Вопросы!

Извините за длинное вступление, но я хотел бы четко понять, что именно я делаю.

  • Является ли мой подход плохим или необычным?
  • Существуют ли какие-либо потенциальные проблемы, связанные с этим способом?
  • Что делали другие люди, когда им нужен динамический интерфейс, но при этом они хотят сохранить Interface Builder. но при этом хотят сохранить все в Interface Builder?

Примечания

Прежде чем кто-нибудь спросит, почему бы мне просто не отобразить вложенные представления на новом экране и не использовать навигационную панель, позвольте мне сказать, что у меня есть очень веские причины, и я понимаю руководящие принципы iOS UI. Приведенный выше пример использования не совсем мой, но он четко описывает проблему, не увязая в моей разработке приложения.

Также я знаю, что мог бы написать все вложенные представления в виде кода, но каждое вложенное представление имеет сложный макет дочерних представлений, и это было бы много кода и возни, чтобы попытаться заставить их выглядеть правильно.

Заранее спасибо.

7
задан Camsoft 12 January 2012 в 17:50
поделиться