2016-06-21 15 views
1

Ich habe eine PageViewController erstellt, um zwischen verschiedenen View Controllern zu wechseln, und ich möchte zeigen, welche Seite wir sehen. Ich fügte ein pageControl hinzu und gab es den folgenden Code.UIPageControl zum Anzeigen der aktuellen Seite

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

Der vollständige 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 
    } 
} 

weiß jemand, was Code, ich sollte die aktuelle Seite einrichten verwenden? Danke im Voraus!

Antwort

3

EDIT einzustellen: found bereits die Antwort!

Ich habe pageControl.currentPage = index in folgenden Funktionen:

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 
} 

Und tat das gleiche für die viewControllerAfterViewController func!

+1

Würde es nicht empfehlen Sie den Code auf diese zu stützen, wenn Sie aktiviert haben Scrollen. Wenn Sie Scrollen aktiviert haben, kann ein Benutzer nicht bis zum Ende oder bis zum Ende und schnell zurück scrollen und in diesen Fällen habe ich festgestellt, dass diese Methoden tatsächlich mit dem aktuellen ViewController zu tun haben. Wenn Sie diesen Fehler besser vermeiden möchten, verwenden Sie die UIPageViewController-Delegate-Methode func pageViewController didFinishAnimating und suchen Sie bei der Überprüfung nach "completed" den aktuellen View-Controller als pageViewController.viewControllers.first ab – Fawkes

0

Set pageViewController.delegate = self, implementieren Protokoll UIPageViewControllerDelegate

und auf dieser Methoden verwenden self.pageControl.currentPage = ...

optional func pageViewController(_ pageViewController: UIPageViewController, 
willTransitionToViewControllers pendingViewControllers: [UIViewController]) 

optional func pageViewController(_ pageViewController: UIPageViewController, 
       didFinishAnimating finished: Bool, 
     previousViewControllers previousViewControllers: [UIViewController], 
      transitionCompleted completed: Bool) 
0

Die UIPageViewController bietet eine Standardeinstellung UIPageControl - ich würde empfehlen, es zu verwenden, wenn Sie nicht bestimmte benutzerdefinierte Anforderungen haben.

Um es zu zeigen, müssen Sie die folgenden zwei Methoden in Ihrem UIPageViewControllerDataSource implementieren:

func presentationCount(for pageViewController: UIPageViewController) -> Int { 
    return n //number of view controllers 
} 

func presentationIndex(for pageViewController: UIPageViewController) -> Int { 
    return i //index of the visible view controller 
}