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

时间:2013-03-09 01:24:25

标签: ios uipageviewcontroller

我有一个UIPageViewController,其中包含从通过网络获取的数据实例化的视图控制器。当用户正在分页并进入最后几页时,我启动了一个新的网络操作,并将生成的新视图控制器放在我的UIPageViewControllerDataSource可变数组视图控制器的末尾。总的来说这一切都很好。

但是如果网络速度很慢(或用户速度很快),则可以在网络操作完成之前到达最终页面。由于当用户到达最后一页时调用了pageViewController:viewControllerAfterViewController:,因此它已经返回nil(“表示没有下一个视图控制器”)。

是否有一种强制UIPageViewController再次调用pageViewController:viewControllerAfterViewController:的好方法(这样当网络操作完成并且现在有新页面时,我可以强制进行此调用,以便用户可以翻页到新页面) ?或者是否有解决方法(可能阻止用户分页到最后一页,但仍然显示反弹动画)?

2 个答案:

答案 0 :(得分:5)

见这里:Refresh UIPageViewController - reorder pages and add new pages

当您从网络获取数据时,请致电setViewControllers: direction: animated: completion:并再次将当前视图设置为当前视图。这迫使它重新调用pageViewController:viewControllerAfterViewController:

答案 1 :(得分:1)

ssloan的答案是密钥的一部分,但在我的情况下,简单地在网络操作完成块中调用setViewControllers:direction:animated:completion:是不够的(由于一些边缘情况)。

我的解决方案是存储pageViewController:viewControllerAfterViewController:返回nil的最新视图控制器(我称之为endPage)并创建方法...

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

...每当我的NSMutableArray内容控制器发生变异(例如,网络操作完成)时我都会调用它,而pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:每当完成时YES都会调用。

相关问题