ssl*_*oan 36 iphone cocoa-touch uikit ios uipageviewcontroller
我有一个UIPageViewController,我正在使用的实现提供网页数据UIPageControllerDelegate和UIPageControllerDataSource.
它一切正常,但我希望能够向页面数据添加项目并重新排序页面数据.
如果用户已经到达最后一个页面,然后我添加了一个项目,则他们无法访问下一页,因为viewControllerAfterViewController:已经调用过.如果他们向后滚动一个然后向前滚动两个,他们可以很好地进入新页面,因此数据设置正确.我怎么能告诉它UIPageViewController刷新下一步的商店?
同样,我想重新排序支持页面视图的集合.但如果我这样做,我会遇到同样的问题 - 页面视图会认为下一页仍然是上次加载当前页面时的情况.
我想我在寻找类似的东西reloadData:上UITableView.
Ort*_*ntz 88
我找到了一种解决方法来强制UIPageViewController忘记当前未显示的相邻页面的缓存视图控制器:
pageViewController.dataSource = nil;
pageViewController.dataSource = self;
Run Code Online (Sandbox Code Playgroud)
我每次更改页面时都会这样做.当然这不会影响当前显示的页面.
有了这个解决办法我避免缓存错误,仍然可以使用animated:YES在setViewControllers:direction:animated:completion:.
mat*_*att 30
你需要打电话setViewControllers:direction:animated:completion:.
此外,在iOS 6中,注意你是否使用UIPageViewControllerTransitionStyleScroll样式,因为如果animated:是YES 则存在一个主要的缓存错误(请参阅我的讨论:UIPageViewController导航到具有Scroll过渡样式的错误页面).
Swift 4 版本用于将 pageviewcontroller 的数据重新加载到 @theory 的版本。
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if !completed { return }
DispatchQueue.main.async() {
self.dataSource = nil
self.dataSource = self
}
}
Run Code Online (Sandbox Code Playgroud)