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

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


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

реализуем следующий метод:

      – (BOOL) splitViewController:(UISplitViewController *)svc

      shouldHideViewController:(UIViewController *)vc

      inOrientation:(UIInterfaceOrientation)orientation{

      return NO;

      }

      Если вернуть из этого метода значение NO, iOS не будет скрывать контроллер основного вида при любой ориентации и оба контроллера – как с основными опциями, так и с их деталями – будут отображаться и в альбомной, и в книжной ориентации. Теперь, реализовав упомянутый метод, мы сможем обойтись без двух следующих методов:

      – (void)splitViewController:(UISplitViewController *)splitController

      willHideViewController:(UIViewController *)viewController

      withBarButtonItem:(UIBarButtonItem *)barButtonItem

      forPopoverController:(UIPopoverController *)popoverController{

      barButtonItem.title = NSLocalizedString(@"Master", @"Master");

      [self.navigationItem setLeftBarButtonItem: barButtonItem animated: YES];

      self.masterPopoverController = popoverController;

      }

      – (void)splitViewController:(UISplitViewController *)splitController

      willShowViewController:(UIViewController *)viewController

      invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{

      [self.navigationItem setLeftBarButtonItem: nil animated: YES];

      self.masterPopoverController = nil;

      }

      Эти методы требовались нам просто для управления кнопкой из навигационной панели, но теперь мы больше не пользуемся ею и можем избавиться от этих методов. Их можно просто закомментировать или вообще удалить из файла DetailViewController.m.

      Заглянув на заголовочный файл контроллера вашего основного вида, вы увидите там нечто подобное:

      #import <UIKit/UIKit.h>

      @class DetailViewController;

      @interface MasterViewController: UITableViewController

      @property (strong, nonatomic) DetailViewController *detailViewController;

      @end

      Как видите, в контроллере основного вида стоит ссылка на контроллер вида с деталями. С помощью этой связи мы можем сообщать контроллеру вида с деталями о сделанном выборе, а также передавать ему другие значения – об этом чуть позже.

      По умолчанию если вы запустите приложение в эмуляторе iPad, то увидите пользовательский интерфейс, очень напоминающий тот, что показан на рис. 1.73. В стандартной реализации, которую Apple предоставляет нам с контроллером основного вида, содержится изменяемый массив. Этот массив заполняется экземплярами NSDate всякий раз, когда вы нажимаете кнопку «плюс» (+) на навигационной панели в этом контроллере вида. Стандартная реализация очень проста, и вы можете ее модифицировать, немного разобравшись в табличных видах. О том, что такое табличные виды и как они заполняются, подробно рассказано в главе 4.

      Рис. 1.73. Контроллер пустого вида с разделенным экраном, работающий в эмуляторе iPad

      1.28. Организация разбивки на страницы с помощью UIPageViewController

      Постановка задачи

      Необходимо создать приложение, работающее по принципу iBooks, где пользователь может листать страницы, как в настоящей книге. Таким образом мы собираемся обеспечить пользователю интуитивно понятную и реалистичную работу с программой.

      Решение

      Воспользуйтесь UIPageViewController.

      Обсуждение

      В среде разработки Xcode есть шаблон для создания контроллеров с постраничной организацией. Перед тем как изучать