Search code examples
iosswiftuipageviewcontrolleruipagecontrol

UIPageControl to show current page


I made a PageViewController to switch between different View Controllers, and i'd like to show which page we see. I added a pageControl, and gave it the following code.

pageControl.currentPageIndicatorTintColor = UIColor.blueColor()
pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControl.numberOfPages = pages.count

The complete code:

import UIKit

class ViewControllerSportinfrastructuur: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

@IBOutlet weak var pageControl: UIPageControl!

var pageViewController: UIPageViewController!
let pages = ["PageOneViewController", "PageTwoViewController"]

//MARK: - page view controller data source
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {
        if index > 0 {
            return viewControllerAtIndex(index - 1)
        }
    }

    return nil
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {
        if index < pages.count - 1 {
            return viewControllerAtIndex(index + 1)
        }
    }
    return nil
}

func viewControllerAtIndex(index: Int) -> UIViewController? {
    let vc = storyboard?.instantiateViewControllerWithIdentifier(pages[index])
    return vc
}

override func viewDidLoad() {
    super.viewDidLoad()

    if let vc = storyboard?.instantiateViewControllerWithIdentifier("MyPageViewController") {
        self.addChildViewController(vc)
        self.view.addSubview(vc.view)

        pageViewController = vc as! UIPageViewController
        pageViewController.dataSource = self
        pageViewController.delegate = self
        pageViewController.setViewControllers([viewControllerAtIndex(0)!], direction: .Forward, animated: true, completion: nil)
        pageViewController.didMoveToParentViewController(self)

        pageControl.currentPageIndicatorTintColor = UIColor.blueColor()
        pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
        pageControl.numberOfPages = pages.count
    }
}

Does anyone know what code i should use to set up the current page? Thanks in advance!


Solution

  • EDIT: found the answer already!

    I added pageControl.currentPage = index in following functions:

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
    
        if let index = pages.indexOf(viewController.restorationIdentifier!) {
            pageControl.currentPage = index
            if index > 0 {
                return viewControllerAtIndex(index - 1)
            }
        }
    
        return nil
    }
    

    And did the same for the viewControllerAfterViewController func!