Ответ 1
Не знаю, продолжаете ли вы по-прежнему работать над этим, но здесь все равно. Чтобы настроить UIPageViewController, вы можете использовать учебник и два вопроса ниже.
http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/
Как реализовать UIPageViewController, который использует несколько ViewControllers
Как добавить UIBarButtonItem в NavigationBar при использовании UIPageViewController
Последняя ссылка относится конкретно к настройке содержимого навигационной панели в зависимости от того, что вы просматриваете.
Ключом является создание свойства UINavigationItem в файле .h вашего контроллера содержимого содержимого UIPageViewController, что означает те/те, которые отображают то, что вы показываете.
Из моего кода в FirstViewController.h
SecondViewController.h
и ThirdViewController.h
@property (strong, nonatomic) UINavigationItem *navItem;
Во второй и третьей ссылках выше вы увидите раскладку макета приложения Master-Detail (в котором используется навигационный контроллер). UIPageViewControllerDataSource
- DetailViewController
. Три страницы, связанные с pageViewController
, являются моими контроллерами представления содержимого.
В DetailViewController.m вам нужно создать экземпляр contentViewControllers где-нибудь. В этот момент вы передаете идентификатор navigationOptemersViewControllers для контроллеров содержимого. Вот как я создаю экземпляры своих контроллеров представления контента, используя методы делегата UIPageViewController
.
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSString * ident = viewController.restorationIdentifier;
NSUInteger index = [_vc indexOfObject:ident];
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
if (index == 0) {
return [self controllerAtIndex:index];
}else if (index == 1){
return [self secondControllerAtIndex:index];
}else if (index == 2){
return [self thirdControllerAtIndex:index];
}else{
return nil;
}
}
Метод делегата вызывает метод ниже. Это почти непосредственно из учебной ссылки с несколькими изменениями.
-(FirstController *)controllerAtIndex:(NSUInteger)index
{
FirstController *fvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstPageController"];
fvc.imageFile = self.pageImages[index];
fvc.titleText = self.pageTitles[index];
fvc.pageIndex = index;
fvc.navItem = self.navigationItem;
return fvc;
}
Обратите внимание, что свойства передаются в контроллер вида, включая self.navigationItem
. Передавая его, вы можете вносить изменения в элементы navigationBar.
Затем в методе viewDidAppear
вашего контроллера содержимого вы можете просто установить заголовок на панели навигации, как это.
navItem.navigationItem.title = @"Whatever you want the title to be";
Важно использовать viewDidAppear
, потому что viewDidLoad
не вызывается каждый раз, когда появляется экран. Я считаю, что UIPageViewController кэширует страницу раньше и страницу после того, что вы просматриваете, что экономит систему при загрузке страницы при каждом ее переходе.
Если вы используете единый контроллер просмотра для всех ваших страниц, таких как учебник, вам придется использовать свойство index, чтобы знать, как установить заголовок.
Надеюсь, это поможет!