基本は以下
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(... が呼び出されるタイミングはあまり直感的ではないので注意ちょっとわかりにくいけど以下のようになる
