質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

337閲覧

storyboard を使わずに複数の ViewController を行き来したい

taro_nii_chan

総合スコア207

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/08/20 13:38

環境

Xcode 8.3.3

やりたい事

UIPageViewControllerを使って複数のViewControllerを行き来したいのですが、複数というのが3ページとかであればstoryboardを使うのですが、50とか100ページを想定していて可変なため非現実的と思いました。
そこでstoryboardを使わずに実装したいのですが、

[Swift3.0] 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、アドバイスなどありましたらお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Storyboardを使わずに実装したいのであれば、参考にされた
[Swift3.0] Storyboardを使わない方法
の記事を参考にして、AppDelegateのdidFinishLaunchingWithOptionsに以下のコードを追記する必要があると思いますが、ちゃんと書いていますか?

swift

1window = UIWindow(frame: UIScreen.main.bounds) 2window!.rootViewController = PageViewController() 3window!.makeKeyAndVisible()

記事ではrootViewControllerにViewControllerを設定していますが、今回はそこをPageViewControllerにする必要があります。もしそこを何も考えずにコピペしてViewControllerにしていたなら、ViewControllerの白い画面が表示されたのかもしれません。

上記のコードを組み込んで、質問のコードをコピペしてみたらちゃんと表示できたので、質問のコード自体は問題ないと思います。

投稿2017/08/20 22:32

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2017/08/21 01:25

お察しの通り、何も考えずコピペをしておりました。 ViewControllerをPageViewControllerに変えたら、後は微調整で思い通り動きました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問