Ответ зависит от того, нужна ли вам поддержка iOS 4 или нет.Если да, ответ таков:
Ответ № 1 - За исключением собственных контроллеров контейнеров Apple, в частности UITabBarController, UINavigationController, UISplitViewController, UIPageViewController и UIPopoverController (я что-то пропустил?), Надлежащим образом не поддерживается способиметь несколько контроллеров представления, активных на одном экране, управляющих различными частями представления.Все методы контроллера представления, такие как presentModalViewController и т. Д., Работают в предположении, что существует один «самый передний» контроллер представления, которому принадлежит весь экран, и если вы попытаетесь, чтобы несколько контроллеров представления управляли различными частями представления, все виды вещей будутперерыв, например переадресация событий поворота экрана и изменение размера / позиционирования видов после перехода страницы.
Однако, если вам нужна только поддержка iOS 5, ответ будет следующим:
Ответ № 2 -Нет проблем!Просто убедитесь, что все ваши контроллеры просмотра подстраниц правильно подключены к главному контроллеру просмотра, который управляет всей страницей.Это означает, что помимо того, что представления контроллеров являются подпредставлениями общего родительского представления, сами контроллеры должны быть дочерними контроллерами общего родительского контроллера.Пока свойства parentViewController контроллера установлены правильно, вы сможете управлять этим составным интерфейсом без особых хлопот.
К сожалению, Apple добавила только открытые сеттеры для childViewControllers и parentViewControllers в iOS5.В iOS4 и более ранних версиях вы ограничены собственными договоренностями с контроллерами контейнеров Apple и не можете создавать свои собственные (по крайней мере, не без проблем с пересылкой событий).
Так что, если вам пока требуется поддержка iOS4, ответ № 3 кажетсяКак ваша лучшая ставка: Создайте свой интерфейс, используя несколько представлений, но один контроллер.Это не так уж плохо.Вы можете создавать собственные подклассы представления, которые управляют своими собственными подвидами (например, нет правила, согласно которому tableViewDataSource или делегат должен быть подклассом UIViewController или что кнопка IBAction должна быть методом в контроллере представления вместо другого представления).
В действительности вы обнаружите, что большую часть функциональности, которую вы обычно встраиваете в контроллер представления, можно вместо этого встроить в «умное» представление контейнера, позволяя разделить экран на несколько автономных «представлений контроллера»,управлять своим собственным содержимым.
Единственный хитрый момент - делать такие вещи, как переходы между одним представлением и следующим.Для этого вы не сможете использовать стандартные методы presentModalViewController или pushViewController, вам придется делать анимацию самостоятельно, используя CATransitions или UIView.