如何在用户到达最后一页后向UIPageViewController添加新页面?

我有一个UIPageViewController ,它包含了通过networking获取的数据实例化的视图控制器。 当用户进行分页并且在最后几页之内时,我启动一个新的networking操作,并将得到的新视图控制器放到我的UIPageViewControllerDataSource的可变视图控制器数组的末尾。 一般来说,这一切运作良好。

但是,如果networking速度很慢(或者用户速度很快),那么在networking操作完成之前可能会到达最后一页。 由于pageViewController:viewControllerAfterViewController:当用户到达最后一页时被调用,它已经返回nil (“表示没有下一个视图控制器”)。

有没有一种很好的方式来强制UIPageViewController调用pageViewController:viewControllerAfterViewController: again(这样,当networking操作完成,现在有新的页面,我可以强制这个调用,使用户可以页面到新的页面)? 或者是有一种解决方法(可能阻止用户分页到最后一页,但仍显示反弹animation)?

看到这里: 刷新UIPageViewController – 重新sorting页面,并添加新的页面

当你从networking中获取数据时,调用setViewControllers: direction: animated: completion:并将当前视图重新设置为当前视图。 这迫使它重新调用pageViewController:viewControllerAfterViewController:

ssloan的答案是关键的一部分,但在我的情况下,只是调用setViewControllers:direction:animated:completion:在networking操作完成块是不够的(由于一些边缘情况)。

我的解决scheme是存储最新的视图控制器pageViewController:viewControllerAfterViewController:返回nil (我称之为endPage ),并创build一个方法…

 - (void)fixAndResetEndPage { if (self.endPage && self.endPage == self.currentPage) { [self.pageController setViewControllers:@[self.currentPage] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; self.endPage = nil; } } 

…当我的内容控制器的NSMutableArray被突变(例如,networking操作完成)和pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:每当完成为YES时,我都会调用它。