2016-06-21 3 views
1

Я сделал PageViewController для переключения между различными контроллерами View, и я хотел бы показать, какую страницу мы видим. Я добавил pageControl и дал ему следующий код.UIPageControl для отображения текущей страницы

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

Полный код:

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 
    } 
} 

Кто-нибудь знает, какой код я должен использовать для настройки текущей страницы? Заранее спасибо!

ответ

3

EDIT: нашел ответ уже!

Я добавил pageControl.currentPage = index в следующих функциях:

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 
} 

И сделал то же самое для viewControllerAfterViewController FUNC!

+1

не Рекомендовал бы основывать свой код на это, если вы листание включен. В случае, если вы имеете прокрутку, пользователь может прокручиваться до конца или до конца и быстро назад, и в этом случае я заметил, что эти методы фактически испортили бы то, что является текущим viewController. Если вы хотите избежать этого сбоя, лучше используйте метод делегата UIPageViewController func pageViewController didFinishAnimating и при проверке «завершено» получить текущий контроллер представления как pageViewController.viewControllers.first – Fawkes

0

Набор pageViewController.delegate = self, реализации протокола UIPageViewControllerDelegate

и использовать на этих методов, чтобы установить 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

UIPageViewController предоставляет по умолчанию UIPageControl - я бы рекомендовал использовать его, если у вас нет особых пользовательских требований.

Для того, чтобы показать, что вам необходимо выполнить следующие два дополнительных методов в вашем UIPageViewControllerDataSource:

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 
} 
Смежные вопросы