我在常规UIViewController中的Container中有一个UIPageViewController(自定义)。我需要能够在每次更改页面时调用一个事件,但是如果它确实发生了变化,而不仅仅是中途或类似的任何变化。
使用:
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
不可靠,每次都不会因某种原因而被调用。
如果您的答案包含有关willTransitionToViewControllers或didFinishAnimating的任何内容,请详细说明,而不仅仅是提及它们,因为我已经知道它们存在但不明白使用它们的正确方法。
谢谢
答案 0 :(得分:5)
使用didFinishAnimating
它具有completed
和finished
属性,因此您知道该页面实际已更改。在pageViewController中,您可以获取当前显示的页面,然后在模型中获取此VC的位置。
首先确保您的ViewController采用UIPageViewControllerDelegate
设置代理(例如在viewDidLoad
)
pageViewController.delegate = self
然后实现以下功能:
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if (completed && finished) {
if let currentVC = pageViewController.viewControllers?.last {
let index = myViewControllers.indexOf(currentVC)
//do something with index
}
}
}