環境
Xcode 8.3.3
やりたい事
UIPageViewController
を使って複数のViewController
を行き来したいのですが、複数というのが3ページとかであればstoryboard
を使うのですが、50とか100ページを想定していて可変なため非現実的と思いました。
そこでstoryboard
を使わずに実装したいのですが、
【決定版】UIPageViewControllerの使い方(Swift)
UIPageViewControllerを使う(swift3.0)
を参考にしてもよく分かりませんでした。
やった事
上のサイトを参考に自分なりに書いたソースを載せます。
swift
1// 2// PageViewController.swift 3// withoutSB 4// 5 6 7import UIKit 8 9class PageViewController: UIPageViewController { 10 11 var index: Int = 5 12 var colorLiteral: [UIColor] = [#colorLiteral(red: 0.5843137503, green: 0.8235294223, blue: 0.4196078479, alpha: 1), #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1), #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1), #colorLiteral(red: 0.5058823824, green: 0.3372549117, blue: 0.06666667014, alpha: 1), #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)] 13 var nthViewController: [UIViewController] = [] 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 self.dataSource = self 19 20 for i in 0..<index { 21 let newController = UIViewController() 22 newController.view.backgroundColor = colorLiteral[i] 23 nthViewController.append(newController) 24 } 25 26 27 setViewControllers([nthViewController[0]], direction: .forward, animated: false, completion: nil) 28 } 29 30 func getNth(index: Int) -> UIViewController { 31 print(nthViewController[index]) 32 return nthViewController[index] 33 } 34 35// func getFirst() -> FirstViewController { 36// return storyboard!.instantiateViewController(withIdentifier: "FirstViewController") as!FirstViewController 37// } 38// func getSecond() -> SecondViewController { 39// return storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 40// } 41// func getThird() -> ThirdViewController{ 42// return storyboard!.instantiateViewController(withIdentifier: "ThirdViewController") as!ThirdViewController 43// } 44 45 override func didReceiveMemoryWarning() { 46 super.didReceiveMemoryWarning() 47 // Dispose of any resources that can be recreated. 48 } 49 50} 51 52extension PageViewController : UIPageViewControllerDataSource { 53 54 func pageViewController(_ pageViewController: 55// UIPageViewController, viewControllerBefore viewController:UIViewController) -> UIViewController? { 56 UIPageViewController, viewControllerBefore viewController:UIViewController) -> UIViewController? { 57 print("右にスワイプ") 58 //右にスワイプした場合に表示したいviewControllerを返す 59 //ようはページを戻す 60 //今表示しているページは何ページ目か取得する 61 let index = nthViewController.index(of: viewController) 62 if index == 0 { 63 //1ページ目の場合は何もしない 64 return nil 65 } else { 66 //1ページ目の意外場合は1ページ前に戻す 67 return nthViewController[index!-1] 68 } 69 } 70 71 func pageViewController(_ pageViewController: 72 UIPageViewController, viewControllerAfter viewController: UIViewController) -> 73 UIViewController? { 74 print("左にスワイプ") 75 //左にスワイプした場合に表示したいviewControllerを返す 76 //ようはページを進める 77 //今表示しているページは何ページ目か取得する 78 let index = nthViewController.index(of: viewController) 79 if index == nthViewController.count-1 { 80 //最終ページの場合は何もしない 81 return nil 82 } else { 83 //最終ページの意外場合は1ページ進める 84 return nthViewController[index!+1] 85 } 86 } 87} 88
結果は白い画面が現れるだけでスワイプしても何も起きませんでした。
ヒント、参考URL、アドバイスなどありましたらお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/21 01:25