我有UIPageViewController
页面控件。在委托中,我实现了以下方法:
presentationCountForPageViewController:
presentationIndexForPageViewController:
这很有效,但总页数可以更改,在这种情况下页面控件中显示的点数不会改变。
当发生这种情况时,如何告诉页面视图控制器调用presentationCountForPageViewController:
来更新总点数?
答案 0 :(得分:1)
我遇到了同样的问题,并且发现的解决方法是每次更改dataSoure时都重置uipageviewcontroller视图,并使用新的dataSource重新加载整个pageViewController。这样,我就能拥有正确数量的点(正确实现了dataSource和委托函数)。我使用以下功能进行此操作:
func reloadPageViewController() {
if pageContentView.subviews.count > 1 {
for _ in 1...pageContentView.subviews.count - 1 {
pageContentView.subviews.last?.removeFromSuperview()
}
}
guard let pageViewController = storyboard?.instantiateViewController(identifier: String(describing: PageViewController.self)) as? PageViewController else {
return
}
pageViewController.removeFromParent()
self.configurePageViewController()
}
答案 1 :(得分:0)
事实证明,这是使用NSFetchedResultsController
作为页面数据来源的结果。在我NSFetchedResultsController
上致电setViewControllers:direction:animated:completion:
之前,UIPageViewController
的点数没有得到更新。
修复方法是调用controllerDidChangeContent:
中的以下函数强制更新页面控件。
func refreshPageController() {
let controllers = pageController.viewControllers
if controllers.count > 0 {
pageController.setViewControllers(controllers, direction: .Forward, animated: false, completion: nil)
}
}
<强>更新强>
虽然上面的解决方案有效,但它打破了当我删除页面时用于滚动到下一页的动画。
更好的解决方案:在调用setViewControllers:direction:animated:completion:
之前,等待将页面删除提交到Core Data。
答案 2 :(得分:0)
再次将dataSource
属性设置为具有新对象数目的数据源对象的新实例。