2016-06-21 40 views
1

私はPageViewControllerを使って、異なるView Controllerを切り替えることができました。どのページが表示されているかを示したいと思います。 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を使用し、 "completed"をチェックしている間、現在のView Controllerを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で、次の2つのオプションのメソッドを実装する必要があります。

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 
} 
関連する問題