Вандад Нахавандипур

iOS. Приемы программирования


Скачать книгу

перейдем к определению корневого контроллера вида и укажем здесь свойство типа UIPopoverController:

      #import "ViewController.h"

      @interface ViewController () <UIAlertViewDelegate>

      @property (nonatomic, strong) UIPopoverController *myPopoverController;

      @property (nonatomic, strong) UIBarButtonItem *barButtonAdd;

      @end

      @implementation ViewController

      <# Оставшаяся часть вашего кода находится здесь #>

      Как видите, мы также определяем для контроллера вида свойство barButtonAdd. Это навигационная кнопка, которую мы добавим на нашу панель. Мы собираемся отображать вспомогательный экран после того, как пользователь нажмет эту кнопку (подробнее о навигационных кнопках рассказано в разделе 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]){

      /* Перейти на сайт и