Легкая сдоба
Несмотря на то, что не сам контроллер представления, UIPopoverController
класс управляет представлением контроллеров представления. Вы используете объект контроллера легкой сдобы представить содержание с помощью легкой сдобы, которая является визуальным уровнем, плавающим выше окна приложения. Легкая сдоба обеспечивает легкий способ представить или собрать информацию от пользователя и обычно используется в следующих ситуациях:
Вывести на экран информацию об объекте на экране
Управлять часто получало доступ к инструментам или параметрам конфигурации
Представить список действий для выполнения на объектах в одном из представлений
Когда устройство находится в портретной ориентации, для представления одной области от разделения просматривают контроллер
Использование легкой сдобы для предыдущих действий является менее навязчивым и громоздким, чем модальное представление. В приложениях для iPad модальные представления должны быть зарезервированы для ситуаций, где Вы требуете, чтобы пользователь явно принял или отменил некоторое действие или информацию. Например, Вы использовали бы модальное представление для выяснения у пользователя пароль, предоставивший доступ к остальной части приложения. Для большинства других случаев Вы использовали бы легкую сдобу вместо этого. Преимущество легкой сдобы состоит в том, что они не покрывают весь экран и могут быть отклонены путем простого ответвления вне представления легкой сдобы. Таким образом они - отличный выбор в ситуациях, где взаимодействие с пользователем с Вашим содержанием не требуется, но предоставляет информацию или дополнительные функции для пользователя.
Рисунок 5-1 показывает, что пример легкой сдобы раньше выводил на экран область от интерфейса представления разделения. Выбор игры от легкой сдобы заставляет основное представление приложения отображать информацию о той игре. (Для получения дополнительной информации о создании интерфейса представления разделения, посмотрите Контроллеры Представления Разделения.)
Создание и представление легкой сдобы
Содержание легкой сдобы получено из объекта контроллера представления, что Вы обеспечиваете. Легкая сдоба способна к представлению большинства типов контроллеров представления. Когда Вы будете готовы представить тот контроллер представления в легкой сдобе, сделайте следующее:
Создайте экземпляр
UIPopoverController
класс и инициализирует его с Вашим объектом контроллера представления.Укажите размер легкой сдобы, которую можно сделать одним из двух способов:
Присвойте значение
contentSizeForViewInPopover
свойство контроллера представления Вы хотите вывести на экран в легкой сдобе.Присвойте значение
popoverContentSize
свойство из самого контроллера легкой сдобы.
(Необязательно) Присвойте делегата в легкой сдобе. Для получения дополнительной информации об ответственности делегата, посмотрите Реализацию Делегата Легкой сдобы.
Представьте легкую сдобу.
При представлении легкой сдобы Вы связываете ее с определенной частью Вашего пользовательского интерфейса. Легкая сдоба обычно связывается с кнопками на панели инструментов, таким образом, 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:
метод Вашего делегата вызывают, сама легкая сдоба была удалена из экрана. В этой точке безопасно удалить существующие ссылки на контроллер легкой сдобы, если Вы не планируете использовать его снова. Можно также использовать этот метод, чтобы обновить пользовательский интерфейс или обновить состояние приложения.
Подсказки для управления легкой сдобой в Вашем приложении
Рассмотрите следующий при записи связанного с легкой сдобой кода для приложения:
Отклонение легкой сдобы программно требует указателя на контроллер легкой сдобы. Единственный способ получить такой указатель состоит в том, чтобы сохранить его самостоятельно, обычно в довольном контроллер представления. Это гарантирует, что довольное контроллер представления в состоянии отклонить легкую сдобу в ответ на надлежащие пользовательские действия.
Можно кэшировать контроллеры легкой сдобы и снова использовать их вместо того, чтобы создать новые с нуля. Контроллеры легкой сдобы являются очень гибкими и таким образом, можно указать другое представление параметры контроллера и параметры конфигурации каждый раз, когда Вы используете их.
При представлении легкой сдобы укажите
UIPopoverArrowDirectionAny
постоянный для разрешенного направления стрелки, когда это возможно. Указание этой константы дает UIKit максимальную гибкость в расположении и калибровке легкой сдобы. При указании ограниченного набора разрешенных направлений стрелки контроллеру легкой сдобы, вероятно, придется уменьшить размер легкой сдобы прежде, чем вывести на экран его.