Представление контроллеров представления от других контроллеров представления

Возможность представить контроллеры представления является инструментом, который Вы имеете в вашем распоряжении для прерывания текущего потока операций и отображения нового набора представлений. Обычно, приложение представляет контроллер представления как временное прерывание для получения важной информации от пользователя. Однако можно также использовать представленные контроллеры представления для реализации альтернативных интерфейсов для приложения в определенные времена.

Как настоящее контроллеров представления другие контроллеры представления

Представленный контроллер представления не является определенным подклассом UIViewController (как UITabBarController или UINavigationController ). Вместо этого любой контроллер представления может быть представлен Вашим приложением. Когда Вы хотите передать определенное значение об отношении между предыдущей иерархией представления и недавно представленной иерархией представления, Однако как панель вкладок и контроллеры навигации, Вы представляете контроллеры представления.

При представлении модального контроллера представления система создает отношение между контроллером представления, сделавшим представленный представление и контроллер представления. В частности, контроллер представления, сделавший обновления представления presentedViewController свойство для указания на его представленный контроллер представления. Точно так же представленный контроллер представления обновляет presentingViewController свойство для указания назад на контроллер представления, представивший его. Рисунок 10-1 показывает, что отношение между контроллером представления, управляющим основным экраном в Календарном приложении и представленным контроллером представления раньше, создавало новые события.

Рисунок 10-1  Представленные представления в Календарном приложении.

Любой объект контроллера представления может представить единственный контроллер представления за один раз. Это - истина даже для контроллеров представления, самостоятельно представленных другим контроллером представления. Другими словами, можно объединить представленные контроллеры представления в цепочку вместе, представив новые контроллеры представления поверх других контроллеров представления по мере необходимости. Рисунок 10-2 показывает визуальное представление процесса объединения в цепочку и действий, инициирующих его. В этом случае, когда пользователь касается значка в представлении камеры, приложение дарит контроллеру представления фотографии пользователя. Ответвление кнопки действий на фото панели инструментов библиотеки предлагает пользователю соответствующие меры и затем представляет другой контроллер представления (люди средство выбора) в ответ на то действие. Выбор контакта (или отмена людей средство выбора) отклоняют тот интерфейс и возвращают пользователя к фото библиотеке. Ответвление кнопки Done тогда распускает фото библиотеку и возвращает пользователя к интерфейсу камеры.

Рисунок 10-2  , Создающий цепочку модальных контроллеров представления

Каждый контроллер представления в цепочке представленных контроллеров представления имеет указатели на другие объекты, окружающие его в цепочке. Другими словами, представленный контроллер представления, представляющий другой контроллер представления, имеет доступные объекты в обоих presentingViewController и presentedViewController свойства. Можно использовать эти отношения для трассировки через цепочку контроллеров представления по мере необходимости. Например, если пользователь отменяет текущую работу, можно удалить все объекты в цепочке путем отклонения первого представленного контроллера представления. Отклонение контроллера представления отклоняет не только, что контроллер представления, но также и любые контроллеры представления оно представило.

На рисунке 10-2 точка, которую стоит отметить, - то, что представленные контроллеры представления являются оба контроллерами навигации. Можно представить UINavigationController объекты таким же образом, что Вы представили бы довольное контроллер представления.

При представлении контроллера навигации Вы всегда представляете UINavigationController сам объект, вместо того, чтобы представить любой из контроллеров представления на его штабеле навигации. Однако отдельные контроллеры представления на штабеле навигации могут представить другие контроллеры представления, включая другие контроллеры навигации. Рисунок 10-3 показывает больше подробности объектов, вовлеченных в предыдущий пример. Как Вы видите, люди, средство выбора не представлено фото контроллером навигации библиотеки, но одним из довольных контроллеры представления на его штабеле навигации.

Рисунок 10-3  , Представляющий контроллеры навигации модально

Стили презентации для модальных представлений

Для приложений для iPad можно представить содержание с помощью нескольких различных стилей. В приложениях для iPhone представленные представления всегда покрывают видимую часть окна, но при работе iPad, просматривают использование контроллеров значение в их modalPresentationStyle свойство определить их появление, когда представлено. Различные варианты для этого свойства позволяют Вам представлять контроллер представления так, чтобы это заполнилось весь или только часть экрана.

Рисунок 10-4 показывает базовые стили презентации, которые доступны. ( UIModalPresentationCurrentContext стиль позволяет контроллеру представления принять стиль презентации своего родителя.) В каждом стиле презентации недоступные области показывают базовое содержание, но не позволяют касания в том содержании. Поэтому в отличие от легкой сдобы, Ваши представленные представления должны все еще иметь средства управления, позволяющие пользователю отклонять представление.

  Стили презентации iPad рисунка 10-4

Для руководства на том, когда использовать различные стили презентации, посмотрите Модальное Представление.

Представление контроллера представления и выбор стиля перехода

Когда контроллер представления представлен с помощью перехода раскадровки, он автоматически инстанцируют и представляют. Контроллер представления представления может сконфигурировать целевой контроллер представления, прежде чем это будет представлено. Для получения дополнительной информации посмотрите Конфигурирование Контроллера назначения, Когда будет Инициирован Переход.

Если необходимо представить контроллер представления программно, необходимо сделать следующее:

  1. Создайте контроллер представления, который Вы хотите представить.

  2. Установите modalTransitionStyle свойство из контроллера представления к требуемому значению.

  3. Присвойте объект делегата контроллеру представления. Как правило, делегат является контроллером представления представления. Делегат используется представленными контроллерами представления для уведомления контроллера представления представления, когда это готово быть отклоненным. Это может также передать другую информацию назад делегату.

  4. Вызовите presentViewController:animated:completion: метод контроллера текущего представления, передающего в контроллере представления, Вы хотите представить.

presentViewController:animated:completion: метод представляет представление для указанного объекта контроллера представления и конфигурирует представленные представлению отношения между новым контроллером представления и контроллером текущего представления. Если Вы не восстанавливаете свое приложение к некоторому предыдущему состоянию, Вы обычно хотите анимировать появление нового контроллера представления. Стиль перехода, который необходимо использовать, зависит от того, как Вы планируете использовать представленный контроллер представления. Таблица 10-1 перечисляет стили перехода, которые можно присвоить modalTransitionStyle свойство представленного контроллера представления и описывает, как Вы могли бы использовать каждого.

Табличные 10-1  Стили перехода для модальных контроллеров представления

Стиль перехода

Использование

UIModalTransitionStyleCoverVertical

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

Для этого стиля перехода контроллеры представления содержания должны обеспечить кнопки для отклонения контроллера представления явно. Как правило, это кнопка Done и дополнительная Кнопка отмены.

Если Вы явно не устанавливаете стиль перехода, этот стиль используется по умолчанию.

UIModalTransitionStyleFlipHorizontal

Используйте этот стиль для изменения режима работы приложения временно. Наиболее распространенное использование для этого стиля должно вывести на экран настройки, которые могли бы часто изменяться, такой как в Погодных приложениях и Акциях. Эти настройки могут предназначаться для целого приложения, или они могут быть определенными для текущего экрана.

Для этого стиля перехода Вы обычно обеспечиваете своего рода кнопку для возврата пользователя нормальному рабочему режиму приложения.

UIModalTransitionStyleCrossDissolve

Используйте этот стиль для представления альтернативного интерфейса, когда устройство изменит ориентации. В таком случае Ваше приложение ответственно за представление и отклонение альтернативного интерфейса в ответ на уведомления изменения ориентации.

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

Для примера того, как реализовать альтернативный интерфейс в ответ на изменения ориентации устройства, посмотрите Создание Альтернативного Альбомного Интерфейса.

Перечисление 10-1 показывает, как представить контроллер представления программно. Когда пользователь добавляет новый рецепт, приложение предлагает пользователю основную информацию о рецепте путем представления контроллера навигации. Контроллер навигации был выбран так, чтобы было стандартное место для помещения кнопки Cancel и Done. Используя контроллер навигации также упрощает разворачивать новый интерфейс рецепта в будущем. Все, что необходимо было бы сделать, продвинуть новые контроллеры представления на штабеле навигации.

Перечисление 10-1  , Представляющее контроллер представления программно

- (void)add:(id)sender {
   // Create the root view controller for the navigation controller
   // The new view controller configures a Cancel and Done button for the
   // navigation bar.
   RecipeAddViewController *addController = [[RecipeAddViewController alloc]
                       init];
 
   // Configure the RecipeAddViewController. In this case, it reports any
   // changes to a custom delegate object.
   addController.delegate = self;
 
   // Create the navigation controller and present it.
   UINavigationController *navigationController = [[UINavigationController alloc]
                             initWithRootViewController:addController];
   [self presentViewController:navigationController animated:YES completion: nil];
}

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

Контексты представления обеспечивают область, покрытую представленным контроллером представления

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

Когда контроллер представления представлен, iOS ищет контекст представления. Это запускается в контроллере представления представления путем чтения definesPresentationContext свойство. Если значение этого свойства YES, тогда контроллер представления представления определяет контекст представления. Иначе, это продолжается через иерархию контроллера представления, пока не возвращается контроллер представления YES или пока это не достигает корневого контроллера представления окна.

Когда контроллер представления определяет контекст представления, он может также принять решение определить стиль презентации. Обычно, представленный контроллер представления определяет, как он представил использование modalTransitionStyle свойство. Устанавливающий контроллер представления definesPresentationContext к YES может также установить providesPresentationContextTransitionStyle к YES. Если providesPresentationContextTransitionStyle установлен в YES, iOS использует контекст представления modalPresentationStyle определить, как представлен новый контроллер представления.

Отклонение представленного контроллера представления

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

Представление стандартных системных контроллеров представления

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

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

Таблица 10-2 перечисляет несколько из стандартных системных контроллеров представления, найденных в iOS. Для получения дополнительной информации о каждом из этих классов, включая функции это обеспечивает, см. соответствующую документацию ссылки класса.

Табличная 10-2  система Стандарта просматривает контроллеры

Платформа

Контроллеры представления

Адресная книга UI

ABNewPersonViewController

ABPeoplePickerNavigationController

ABPersonViewController

ABUnknownPersonViewController

Набор события UI

EKEventEditViewController

EKEventViewController

Игровой набор

GKAchievementViewController

GKLeaderboardViewController

GKMatchmakerViewController

GKPeerPickerController

GKTurnBasedMatchmakerViewController

Сообщение UI

MFMailComposeViewController

MFMessageComposeViewController

Медиапроигрыватель

MPMediaPickerController

MPMoviePlayerViewController

UIKit

UIImagePickerController

UIVideoEditorController