基本は以下
http://qiita.com/paming/items/a6e3cf15e1178d01d57d
キャストしてもいいんだけど手頃なタグを使ってみた
普通にキャストしたほうが良かったかもしれない
/** Labelを一つだけ持つシンプルなViewController */ class CustomViewController: UIViewController { @IBOutlet var numberLabel: UILabel! var number: String = "" override func viewDidLoad() { super.viewDidLoad() numberLabel.text = number } } class PageViewController: UIPageViewController, UIPageViewControllerDataSource { private var viewControllerList = [UIViewController]() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. // viewcontroller作成 for i in 0..<3 { // それぞれの画面の設定 以下は同様の画面構成を想定しているがそれぞれ違うVCでも可 let vc = CustomViewController() // この段階ではラベルはnilなので適当なメンバに入れてViewDidLoadでラベルの値を設定する vc.number = i.description // タグに連番を振る 識別さえできればOK vc.view.tag = viewControllerList.count viewControllerList.append(vc) } // ページ移動させるViewControllerの設定 そのまま配列を渡せばいいというわけでもない模様 self.setViewControllers([viewControllerList.first!], direction: .Forward, animated: false, completion: nil) /** 画面のズレを防ぐ */ self.automaticallyAdjustsScrollViewInsets = false self.dataSource = self } /** 現在表示中のVCの前のVCを設定する */ func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { var index = viewController.view.tag - 1 if( index < 0 ) { index = viewControllerList.count-1 } return viewControllerList[index] } /** 現在表示中のVCの次のVCを設定する */ func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { var index = viewController.view.tag + 1 if( index == viewControllerList.count ) { index = 0 } return viewControllerList[index] } }func pageViewController(... が呼び出されるタイミングはあまり直感的ではないので注意
ちょっとわかりにくいけど以下のようになる