2

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

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

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

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

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

Спасибо!

: -Joe

ответ

2

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

Вы можете создать настраиваемый контроллер просмотра для управления контроллерами представлений. Подумайте об этом как 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];

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

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

+0

Привет, спасибо за предложение ...Является ли предоставленный вами код предполагаемым в самом UIViewController? Я обнаружил, что если у меня есть несколько пользовательских UIViewController на экране на iPad в любой момент, то я получаю спорадические результаты, такие как авторотирование не работает правильно. Тем не менее, я обнаружил, что с этого момента я могу использовать UINavigationController, чтобы сделать много работы на ногах ... – jowie

+0

Извините меня за мой поздний ответ. Да, это должно быть в вашем настраиваемом контроллере корневого представления, откуда вы будете управлять всеми контроллерами просмотра детей. Я также использую UINavigationController в качестве моего корневого контроллера из-за той же самой проблемы, с которой вы столкнулись. Моя структура: UIWindow-> UINavigationController (HIDDEN) -> MyRootViewController -> [menuControllers, headerControllers, baseControllers]; – ludesign

1

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

+0

Это интересно, однако, когда вы говорите «каждый из которых может иметь объект контроллера», как бы эти объекты контроллера проявлялись? – jowie

+0

Точно так же, как UIViewController - это класс с свойством 'view', вы можете создавать свои собственные классы контроллеров, которые имеют ссылки на представления, выступают в качестве делегатов их представлений и обычно заполняют одну и ту же роль контроллера. Таким образом, в вашем случае элемент навигации может быть пользовательским представлением, полным кнопок, и эти кнопки могут вызывать методы IBAction на каком-то пользовательском классе контроллера, отвечающем только за управление интерфейсом навигации. Таким образом, у вас нет всего, что связано с одним UIViewController, и вы можете создать экземпляр этого настраиваемого контроллера навигации и просмотреть, где бы они ни были нужны. – Jonah

Смежные вопросы