>@property (nonatomic, strong) UIButton *buttonAudio;
>@end
>@implementation PopoverContentViewController
><# Оставшаяся часть вашего кода находится здесь #>
Затем создадим две кнопки в контроллере информационного вида и свяжем их ссылками с методами, обеспечивающими их функционирование. Эти методы будут закрывать тот вспомогательный экран, в котором отображается контроллер информационного вида. Не забывайте, что контроллер вспомогательного экрана будет присваивать себя свойству popoverController, относящемуся к контроллеру информационного вида:
>– (BOOL) isInPopover{
>Class popoverClass = NSClassFromString(@"UIPopoverController");
>if (popoverClass!= nil &&
>UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad &&
>self.popoverController!= nil){
>return YES;
>} else {
>return NO;
>}
>}
>– (void) gotoAppleWebsite:(id)paramSender{
>if ([self isInPopover]){
>/* Перейти на сайт и закрыть вспомогательный экран. */
>[self.popoverController dismissPopoverAnimated: YES];
>} else {
>/* Обработать ситуацию с iPhone. */
>}
>}
>– (void) gotoAppleStoreWebsite:(id)paramSender{
>if ([self isInPopover]){
>/* Перейти на сайт и закрыть вспомогательный экран. */
>[self.popoverController dismissPopoverAnimated: YES];
>} else {
>/* Обработать ситуацию с iPhone. */
>}
>}
>– (void)viewDidLoad{
>[super viewDidLoad];
>self.contentSizeForViewInPopover = CGSizeMake(200.0f, 125.0f);
>CGRect buttonRect = CGRectMake(20.0f,
>20.0f,
>160.0f,
>37.0f);
>self.buttonPhoto = [UIButton buttonWithType: UIButtonTypeRoundedRect];
>[self.buttonPhoto setTitle:@"Photo"
>forState: UIControlStateNormal];
>[self.buttonPhoto addTarget: self
>action:@selector(gotoAppleWebsite:)
>forControlEvents: UIControlEventTouchUpInside];
>self.buttonPhoto.frame = buttonRect;
>[self.view addSubview: self.buttonPhoto];
>buttonRect.origin.y += 50.0f;
>self.buttonAudio = [UIButton buttonWithType: UIButtonTypeRoundedRect];
>[self.buttonAudio setTitle:@"Audio"
>forState: UIControlStateNormal];
>[self.buttonAudio addTarget: self
>action:@selector(gotoAppleStoreWebsite:)
>forControlEvents: UIControlEventTouchUpInside];
>self.buttonAudio.frame = buttonRect;
>[self.view addSubview: self.buttonAudio];
>}
Теперь в методе viewDidLoad корневого контроллера вида создадим навигационную кнопку. В зависимости от типа устройства при нажатии навигационной кнопки мы будем отображать либо вспомогательный экран (на iPad), либо предупреждающий вид (на iPhone):
>– (void)viewDidLoad{
>[super viewDidLoad];
>/* Проверяем, существует ли этот класс в том варианте iOS,
>где действует приложение. */
>Class popoverClass = NSClassFromString(@"UIPopoverController");
>if (popoverClass!= nil &&
>UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
>PopoverContentViewController *content =
>[[PopoverContentViewController alloc] initWithNibName: nil
>bundle: nil];
>self.popoverController = [[UIPopoverController alloc]
>initWithContentViewController: content];
>content.popoverController = self.popoverController;
>self.barButtonAdd = [[UIBarButtonItem alloc]
>initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
>target: self
>action:@selector(performAddWithPopover:)];
>} else {
>self.barButtonAdd = [[UIBarButtonItem alloc]
>initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
>target: self
>action:@selector(performAddWithAlertView:)];
>}
>[self.navigationItem setRightBarButtonItem: self.barButtonAdd
>animated: NO];
>}
Контроллер вспомогательного экрана ставит на себя ссылку в контроллере информационного вида сразу после инициализации информационного вида. Это очень важно. Контроллер вспомогательного экрана невозможно инициализировать в отсутствие контроллера информационного вида. Как только контроллер вспомогательного экрана инициализирован посредством контроллера информационного вида, можно продолжать работу и изменять контроллер информационного вида в контроллере вспомогательного экрана – но этого нельзя делать в процессе инициализации.