iOS. Приемы программирования. Вандад Нахавандипур
Чтение книги онлайн.

Читать онлайн книгу iOS. Приемы программирования - Вандад Нахавандипур страница 66

СКАЧАТЬ рассказано в разделе 1.15). При этом необходимо гарантировать, что мы инстанцируем вспомогательный экран только для iPad. Прежде чем идти дальше и инстанцировать корневой контроллер вида с навигационной кнопкой, создадим подкласс от UIViewController и назовем его PopoverContentViewController. В дальнейшем будем отображать его содержимое на вспомогательном экране. В разделе 1.9 подробнее рассказано о контроллерах видов и о том, как их создавать.

      В контроллере информационного вида, отображаемого на вспомогательном экране, будет две кнопки (как мы и рассчитывали). Тем не менее в этом контроллере вида должна быть также ссылка на контроллер вспомогательного экрана. Она нужна, чтобы убрать вспомогательный экран, как только пользователь нажмет любую из кнопок. Сначала в контроллере информационного вида нужно определить специальное свойство для ссылки на вспомогательный экран:

      #import <UIKit/UIKit.h>

      @interface PopoverContentViewController: UIViewController

      /* Не следует определять данное свойство как strong. В противном случае возникнет цикл удержания (Retain Cycle) между контроллером информационного вида и контроллером вспомогательного экрана, так как контроллер вспомогательного экрана не даст исчезнуть контроллеру информационного вида и наоборот. */

      @property (nonatomic, weak) UIPopoverController *popoverController;

      @end

      И здесь же, в файле реализации контроллера вида с содержимым, объявим кнопки панели:

      #import "PopoverContentViewController.h"

      @interface PopoverContentViewController ()

      @property (nonatomic, strong) UIButton *buttonPhoto;

      @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. */

      }

      }

СКАЧАТЬ