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

Posted

技术标签:

【中文标题】用户到达最后一页后,如何将新页面添加到 UIPageViewController?【英文标题】:How can I add new pages to a UIPageViewController after the user has reached the last page? 【发布时间】:2013-03-09 01:24:25 【问题描述】:

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

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

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

【问题讨论】:

我也有同样的问题 - 如果您找到解决办法,请在此处发布您的解决方案。我也会这样做。谢谢 【参考方案1】:

请看这里:Refresh UIPageViewController - reorder pages and add new pages

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

【讨论】:

强制当前视图控制器重新加载。没有重新加载当前页面的任何修复?【参考方案2】:

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

【讨论】:

根据我的经验,调用 setViewControllers() 并不能保证 pageViewController:viewControllerAfterViewController 会被调用。

以上是关于用户到达最后一页后,如何将新页面添加到 UIPageViewController?的主要内容,如果未能解决你的问题,请参考以下文章

从一页导航到另一页后脚本未加载

Scrapy Last Page 不为空,并且在第 146 页后,最后一页再次显示

如何在reportlab中手动将新页面添加到PDF文档?

python下用selenium的webdriver包如何在执行完点击下一页后没有获得下一页新打开页面的html源代码

使用ConvenientBanner时页面第一次显示总会显示最后一页

python下用selenium的webdriver包如何在执行完点击下一页后获得下一页新打开页面的html源代码呢?