如何更新UIPageViewController页面控件计数

时间:2015-04-16 22:17:42

标签: ios swift nsfetchedresultscontroller uipageviewcontroller uipagecontrol

我有UIPageViewController页面控件。在委托中,我实现了以下方法:

  • presentationCountForPageViewController:
  • presentationIndexForPageViewController:

这很有效,但总页数可以更改,在这种情况下页面控件中显示的点数不会改变。

当发生这种情况时,如何告诉页面视图控制器调用presentationCountForPageViewController:来更新总点数?

3 个答案:

答案 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属性设置为具有新对象数目的数据源对象的新实例。