PageViewController current page index in Swift
You can use didFinishAnimating, and set tags to viewcontrollers. try this
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){ if (!completed) { return } self.pageControl.currentPageIndex = pageViewController.viewControllers!.first!.view.tag //Page Index}
Add this code to your UIPageViewController
.
var pages = [UIViewController]()var currentIndex: Int { guard let vc = viewControllers?.first else { return 0 } return pages.firstIndex(of: vc) ?? 0}
In Swift 3
Override didFinishAnimating function of UIPageViewControllerDelegate like this:
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { if completed { if let currentViewController = pageViewController.viewControllers![0] as? WalkthroughContentViewController { pageControl.currentPage = currentViewController.index } }}
where WalkthroughContentViewController is the UIViewController presented by UIPageViewController
Remember to keep an index variable inside the WalkthroughContentViewController. Also, in the viewDidLoad method set:
delegate = self