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 есть шаблон для создания контроллеров с постраничной организацией. Перед тем как изучать