В шаблоне проекта с разделенным экраном есть два файла, о которых следует поговорить отдельно:
• MasterViewController – контроллер основного вида, располагающегося в левой части разделенного экрана в iPad. В iPhone это первый контроллер, который увидит пользователь;
• DetailViewController – контроллер вида с деталями, который отображается в правой части разделенного экрана на iPad. В iPhone это тот контроллер, который занимает верхнюю позицию в стеке, как только пользователь выбирает любой элемент в корневом (первом, основном) контроллере вида.
Теперь нужно подумать, как будет выглядеть обмен информацией между экраном основных параметров и экраном деталей. Хотите ли вы организовать такой обмен информацией через делегат приложения или желаете, чтобы основной вид посылал сообщения непосредственно виду с деталями? Это зависит от вас.
Если запустить такое приложение в эмуляторе iPad, то в альбомном режиме мы увидим контроллеры основного вида и вида с деталями в разделенном экране, но если изменить ориентацию на книжную, то вид с основными параметрами исчезнет и на его месте появится навигационная кнопка Master (Основной). Она будет располагаться в левой верхней части навигационной панели контроллера с детальной информацией. Хотя это и неплохой вариант, но мы ожидали иного, так как сравниваем наш проект с приложением Settings (Настройки) из iPad. Если в iPad повернуть экран с приложением Settings (Настройки) так, чтобы он приобрел книжную ориентацию, то на экране все равно останутся оба контроллера видов: и с основной информацией, и с деталями. Как нам добиться такого результата? Оказывается, Apple предлагает API (интерфейс программирования приложений), с помощью которого как раз и можно решить такую задачу. Просто переходим в файл DetailViewController.m и реализуем следующий метод:
>– (BOOL) splitViewController:(UISplitViewController *)svc
>shouldHideViewController:(UIViewController *)vc
>inOrientation:(UIInterfaceOrientation)orientation{
>return NO;
>}
Если вернуть из этого метода значение NO, iOS не будет скрывать контроллер основного вида при любой ориентации и оба контроллера – как с основными опциями, так и с их деталями – будут отображаться и в альбомной, и в книжной ориентации. Теперь, реализовав упомянутый метод, мы сможем обойтись без двух следующих методов:
>– (void)splitViewController:(UISplitViewController *)splitController
>willHideViewController:(UIViewController *)viewController
>withBarButtonItem:(UIBarButtonItem *)barButtonItem
>forPopoverController:(UIPopoverController *)popoverController{
>barButtonItem.title = NSLocalizedString(@"Master", @"Master");
>[self.navigationItem setLeftBarButtonItem: barButtonItem animated: YES];
>self.masterPopoverController = popoverController;
>}
>– (void)splitViewController:(UISplitViewController *)splitController
>willShowViewController:(UIViewController *)viewController
>invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{
>[self.navigationItem setLeftBarButtonItem: nil animated: YES];
>self.masterPopoverController = nil;
>}
Эти методы требовались нам просто для управления кнопкой из навигационной панели, но теперь мы больше не пользуемся ею и можем избавиться от этих методов. Их можно просто закомментировать или вообще удалить из файла DetailViewController.m.
Заглянув на заголовочный файл контроллера вашего основного вида, вы увидите там нечто подобное:
>#import
>@class DetailViewController;
>@interface MasterViewController: UITableViewController
>@property (strong, nonatomic) DetailViewController *detailViewController;