基本は以下
http://qiita.com/paming/items/a6e3cf15e1178d01d57d
キャストしてもいいんだけど手頃なタグを使ってみた
普通にキャストしたほうが良かったかもしれない
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | /** 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] } } |
ちょっとわかりにくいけど以下のようになる