Как разбить представление iPad на более управляемые куски? - PullRequest
2 голосов
/ 04 августа 2010

Я знаю, что меня, вероятно, будут ругать за то, что я не читаю HIG или какую-либо документацию должным образом, но после просмотра нескольких обучающих видео и создания нескольких небольших проектов на iPhone, я сейчас пытаюсь собрать воедино на iPad и, ну, мой мозг болит.

Я понял идею на iPhone, что один вид = один экран и один вид = один контроллер вида. Но сейчас я имею дело с аппаратным обеспечением, которое может показывать несколько вещей одновременно, я не совсем понимаю, как я должен с ним работать.

В качестве примера я приведу текущий проект, над которым я работаю ... Я собрал несколько разных контроллеров представления для разных экранов контента (заставка, меню, просмотр статей и т. Д.). Но затем некоторые из экранов имеют общий контент. Например, экраны меню и статьи имеют строку меню (например, панель инструментов), которая скользит вниз от верхней части экрана и обеспечивает навигацию. Кроме того, у меня есть элемент навигации, который должен скользить вверх от нижней части экрана, чтобы перейти к различным статьям. Это то, что я видел во многих других приложениях для iPad (например, Wired).

Но я не должен ставить на экран более одного контроллера одновременно, не так ли? Мало того, но если я это сделаю, то функция автоматического поворота начинает становиться немного ментальной. Но если я помещу все в один контроллер представления для одного экрана, я получу 1000 строк кода, большинство из которых необходимо скопировать в другие контроллеры представления. Похоже, довольно уродливое решение для меня.

Так что я, очевидно, что-то делаю не так ... Но что мне делать? Даже если бы кто-то мог указать мне направление информации, которую я должен читать, я был бы очень благодарен.

Спасибо!

: - Джо

Ответы [ 2 ]

2 голосов
/ 05 января 2011

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

Вы можете создать собственный контроллер представлений для управления вашими контроллерами представлений.Думайте об этом как UINavigationController или UISplitViewController.

У вас есть NSMutableArray viewControllers

@property (nonatomic, retain) NSMutableArray *viewController;

/*
 Do not use this code in production, its just for the example
*/
- (void)presentViewController:(UIViewController *)controller inRect:(CGRect)rect {

    // check if viewcontroller is valid object
    if (controller == nil) {
        return;
    }

    // retain the controller
    [self.viewController addObject:controller];

    // position controllers view in the desired rect
    // (in your implementation you might create a zones and use them instead)
    controller.view.frame = rect;

    // you might want to provide some animation capabilities here
    [self.view addSubview:controller.view];
}

Теперь у вас может быть столько представлений с их собственными контроллерами представления на экране, сколько вам нужно.Например, у вас могут быть вложенные контроллеры представления: ViewControllerManager-> NavigationController -> [ViewControllers];

PS Конечно, полная реализация будет более сложной, вам нужно будет вызывать viewcontrollers viewWill / viewDid, управлять анимациями представления viewcontroller(представление и отклонение), управление памятью в lowMemoryWarning (очистка невидимых или неиспользуемых контроллеров представления) и т. д.

Надеюсь, что это немного поможет.:)

1 голос
/ 06 января 2011

Я думаю, что вам не хватает того, что вы могли запутаться, которые не являются UIViewControllers. Вы совершенно правы, что UIKit ожидает, что вы будете отображать только один UIViewController за один раз (за исключением контроллеров представления контейнера Apple). Однако тот единственный контроллер представления может управлять иерархией многих представлений, у каждого из которых мог бы быть объект контроллера, управляющий некоторым их поведением. Затем вы можете повторно использовать эти контроллеры или пользовательские представления во многих контроллерах представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...