我有一个UIPageViewController,我在data source上实现了两个可选方法来获取自动UIPageControl。
我有以下帮助方法,可以在索引和视图控制器之间进行转换。
- (UIViewController *)viewControllerForIndex:(NSInteger)index;
- (NSInteger)indexFromViewController:(UIViewController *)viewController;
第一种方法创建一个新的视图控制器,将自己配置为特定的索引,并将该索引存储在可检索的位置(即第二种方法访问的位置)。
我使用以下代码实例化我的页面视图控制器:
[pageViewController setViewControllers:@[[self viewControllerForIndex:0]]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
以下是我的数据源方法:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSInteger currentIndex = [self indexFromViewController:viewController];
if (currentIndex == 0) {
return nil;
} else {
return [self viewControllerForIndex:currentIndex-1];
}
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSInteger currentIndex = [self indexFromViewController:viewController];
if (currentIndex == self.data.count - 1) {
return nil;
} else {
return [self viewControllerForIndex:currentIndex+1];
}
}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
return self.data.count;
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
return 0;
}
当我向前导航时,一切正常,当我向后导航时,视图控制器开始以随机顺序出现。
我认为这与viewViewController:viewControllerBeforeViewController:永远不会被调用有关。页面视图控制器只调用pageViewController:viewControllerAfterViewController:,即使我开始向后滑动。
UIPageViewController在故事板中配置如下:
如何让页面视图控制器以正确的顺序显示视图控制器?
更新:当我将代码复制到一个全新的项目中时,一切都运行良好。我想我的新问题是你知道任何pods,框架,链接器标志,以及可能导致这种行为的其他设置吗?
如果我递归地在当前页面视图控制器之上呈现相同的页面视图控制器,则错误发生在视图控制器的每个奇数版本上。 (即,它发生在第一个,第三个,等等。)