不知道您是否还在进行此项工作,但无论如何,为了设置UIPageViewController,您可以使用以下教程和两个问题。
http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/
如何实现利用多个ViewControllers的UIPageViewController
如何在使用UIPageViewController时将UIBarButtonItem添加到NavigationBar
最后一个链接特别涉及根据您正在查看的内容设置navigationBar的内容。
关键是在UIPageViewController内容视图控制器的.h文件中创建UINavigationItem属性,这意味着显示您正在显示的任何东西的那些/一个。来自我的代码:FirstViewController.h SecondViewController.h 和ThirdViewController.h。
@property (strong, nonatomic) UINavigationItem *navItem;
在上面第二和第三个链接中,您将看到一个主从应用程序的故事板布局(其中使用了导航控制器)。 UIPageViewControllerDataSource
是 DetailViewController
。 与 pageViewController
相关联的三个页面是我的内容视图控制器。
在 DetailViewController.m 中,您必须在某个地方实例化 contentViewControllers。 在那一点上,您将 DetailViewControllers 的 navigationItem id 传递给内容视图控制器。 这是我如何使用 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会缓存当前页面前后的页面,从而避免每次导航到该页面时重新加载该页面。
如果您像教程中一样使用单个视图控制器来管理所有页面,则必须使用索引属性来确定标题应设置为什么。
希望这可以帮到您!