Легкая сдоба

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

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

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

Рисунок 5-1  Используя легкую сдобу для отображения основной области

Создание и представление легкой сдобы

Содержание легкой сдобы получено из объекта контроллера представления, что Вы обеспечиваете. Легкая сдоба способна к представлению большинства типов контроллеров представления. Когда Вы будете готовы представить тот контроллер представления в легкой сдобе, сделайте следующее:

  1. Создайте экземпляр UIPopoverController класс и инициализирует его с Вашим объектом контроллера представления.

  2. Укажите размер легкой сдобы, которую можно сделать одним из двух способов:

    • Присвойте значение contentSizeForViewInPopover свойство контроллера представления Вы хотите вывести на экран в легкой сдобе.

    • Присвойте значение popoverContentSize свойство из самого контроллера легкой сдобы.

  3. (Необязательно) Присвойте делегата в легкой сдобе. Для получения дополнительной информации об ответственности делегата, посмотрите Реализацию Делегата Легкой сдобы.

  4. Представьте легкую сдобу.

При представлении легкой сдобы Вы связываете ее с определенной частью Вашего пользовательского интерфейса. Легкая сдоба обычно связывается с кнопками на панели инструментов, таким образом, presentPopoverFromBarButtonItem:permittedArrowDirections:animated: метод является удобным способом представить легкую сдобу от панели инструментов Вашего приложения. Можно также связать легкую сдобу с определенной частью одного из представлений с помощью presentPopoverFromRect:inView:permittedArrowDirections:animated: метод.

Легкая сдоба обычно получает свой начальный размер из contentSizeForViewInPopover свойство представляемого контроллера представления. Размер по умолчанию, сохраненный в этом свойстве, 320 пикселей шириной 1 100 пикселей высотой. Можно настроить значение по умолчанию путем присвоения нового значения contentSizeForViewInPopover свойство. Также можно присвоить значение popoverContentSize свойство самого контроллера легкой сдобы. При изменении контроллера представления, выведенного на экран легкой сдобой, пользовательская информация о размере, Вы вставляете popoverContentSize свойство заменяется размером нового контроллера представления. Изменения в довольном контроллер представления или его размер, в то время как легкая сдоба видима, автоматически анимированы. Можно также изменить размер (с или без анимаций) использование setPopoverContentSize:animated: метод.

Перечисление 5-1 показывает простой метод действия, представляющий легкую сдобу в ответ на пользовательские касания в кнопке на панели инструментов. Легкая сдоба сохранена в свойстве (определенный классом владения), который поддерживает сильную ссылку к объекту легкой сдобы. Размер легкой сдобы установлен в размер представления контроллера представления, но два не должны быть тем же. Конечно, если эти два не являются тем же, необходимо использовать представление прокрутки, чтобы гарантировать, что пользователь видит все содержание легкой сдобы.

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

- (IBAction)toolbarItemTapped:(id)sender
{
   MyViewController* content = [[MyViewController alloc] init];
   UIPopoverController* aPopover = [[UIPopoverController alloc]
        initWithContentViewController:content];
   aPopover.delegate = self;
 
   // Store the popover in a custom property for later use.
   self.popoverController = aPopover;
 
   [self.popoverController presentPopoverFromBarButtonItem:sender
        permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

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

Реализация делегата легкой сдобы

Когда легкая сдоба отклонена вследствие пользовательских касаний вне представления легкой сдобы, легкая сдоба автоматически уведомляет своего делегата относительно действия. При обеспечении делегата можно использовать этот объект предотвратить увольнение легкой сдобы или выполнить дополнительные действия в ответ на увольнение. popoverControllerShouldDismissPopover: метод делегата позволяет Вам управлять, должна ли фактически быть отклонена легкая сдоба. Если Ваша реализация возвращается, если Ваш делегат не реализует метод, или YES, контроллер отклоняет легкую сдобу и отправляет a popoverControllerDidDismissPopover: обменивайтесь сообщениями делегату.

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

К этому времени popoverControllerDidDismissPopover: метод Вашего делегата вызывают, сама легкая сдоба была удалена из экрана. В этой точке безопасно удалить существующие ссылки на контроллер легкой сдобы, если Вы не планируете использовать его снова. Можно также использовать этот метод, чтобы обновить пользовательский интерфейс или обновить состояние приложения.

Подсказки для управления легкой сдобой в Вашем приложении

Рассмотрите следующий при записи связанного с легкой сдобой кода для приложения: