在UIPageViewController中跟踪页面索引的可靠方法 - Swift

Mar*_*kin 1 containers uipagecontrol ios uipageviewcontroller swift

我在常规UIViewController中的Container内有一个UIPageViewController(自定义).我需要能够在每次更改页面时调用一个事件,但是如果它确实发生了变化,而不仅仅是一半或类似的事情.

使用:

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
Run Code Online (Sandbox Code Playgroud)

是不可靠的,每次都不会因为某些原因而被调用.

如果您的答案包含有关willTransitionToViewControllers或didFinishAnimating的任何内容,请详细说明,而不仅仅是提及它们,因为我已经知道它们存在但不明白使用它们的正确方法.

谢谢

Jam*_*s P 5

使用didFinishAnimating它有一个completedfinished属性,让你知道的页面实际上已经改变了.从pageViewController中,您可以获取当前显示的页面,然后在模型中获取此VC的位置.

首先确保您的ViewController采用 UIPageViewControllerDelegate

设置委托(例如viewDidLoad)

pageViewController.delegate = self
Run Code Online (Sandbox Code Playgroud)

然后实现以下功能:

    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
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)