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

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

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

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

Q&A

解決済

1回答

258閲覧

pagaViewControllerの遷移がうまくできません

coco7777

総合スコア8

Swift

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

0グッド

0クリップ

投稿2022/04/24 12:30

wift 初学者です。
pageViewを用いた遷移を行いたいのですが、うまくいきません。
この記事を参考(https://qiita.com/REON/items/9e937128e611506f9027)
に写経してみたのですが、ビルドはできても真っ黒い画面になって進みません。
試しにpageViewControllerではないcontroller(本来1枚目に設定したいもの:写真1枚目右)にinitialViewControllerを設定するとビルド成功後に画面に表示されます。
ググってみたり、海外の方の動画を見て自分なりに修正してみましたが、解決できなかったので質問させていただきます。
ご教授ください

swift

1import UIKit 2 3 class PageViewController: UIPageViewController { 4 5 private var controllers = [UIViewController]() 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 setupPageViewController() 11 12 } 13 14 private func setupPageViewController() { 15 16 let firstVC = storyboard?.instantiateViewController( 17 withIdentifier: "startViewController" 18 ) as! startViewController 19 let secondVC = storyboard?.instantiateViewController( 20 withIdentifier: "nikkiTableViewController" 21 ) as! nikkiTableViewController 22 23 controllers = [firstVC, secondVC] 24 setViewControllers([controllers[0]], direction: .forward, animated: true, completion: nil) 25 26 self.dataSource = self 27 } 28 29} 30 31extension PageViewController: UIPageViewControllerDataSource { 32 33 func presentationCount(for pageViewController: UIPageViewController) -> Int { 34 return controllers.count 35 } 36 37 //前に進む 38 func pageViewController(_ pageViewController: UIPageViewController, 39 viewControllerBefore viewController: UIViewController) -> UIViewController? { 40 41 if let index = controllers.firstIndex(of: viewController), 42 index < controllers.count - 1 { 43 return controllers[index + 1] 44 } 45 46 return nil 47 } 48 49 //後へ進む 50 func pageViewController(_ pageViewController: UIPageViewController, 51 viewControllerAfter viewController: UIViewController) -> UIViewController? { 52 53 if let index = controllers.firstIndex(of: viewController), 54 index > 0 { 55 return controllers[index - 1] 56 } 57 58 return nil 59 } 60 61 62}

イメージ説明
イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/04/24 15:11

「startView」のStoryboardの「Page View Controller」のIdentityインスペクタのClassは「PageViewController」になっていますでしょうか? デバッグした時にPageViewControllerクラスのviewDidLoadでブレイクポイントは止まるでしょうか(viewDidLoadが動いているでしょうか)?
coco7777

2022/04/25 11:29

xg63ex2bさん わかりやすい回答ありがとうございます。 IdentityインスペクタのClassは「PageViewController」はCustom ClassのClassのことで間違い無いでしょうか? その部分であればClass設定はしております。 ブレイクポイントが適切に止まるというのは、PageViewControllerクラスのviewDidLoadの下に設定して ビルドした時に緑色のラインがでるということでしょうか?初心者なので相違があったらすみません。 ブレイクポイントを設定してビルドしても緑色のラインは出ませんでした。
退会済みユーザー

退会済みユーザー

2022/04/25 11:45

コメントありがとうございます。 > IdentityインスペクタのClassは「PageViewController」はCustom ClassのClassのことで間違い無いでしょうか? そうです、Custom ClassのClassのことです。 そこが「PageViewController」であればPageViewController.viewDidLoadは動きそうですよね。 > ブレイクポイントが適切に止まるというのは、PageViewControllerクラスのviewDidLoadの下に設定して ビルドした時に緑色のラインがでるということでしょうか? ビルドしたときというか、メニューバーからProduct-Runしたときですね(あるいは「▶︎」マーク)。 ブレイクポイント(行番号のところの青いマーク)をつけておけば緑色のラインが出ますよね。 pageViewControllerのファイル名は小文字から始まると思いますが、 質問欄の実際のクラスの名前を見ると、大文字から始まる(PageViewController)ように見えます。 大文字小文字も間違いなく、IdentityインスペクタのCustom ClassのClassは設定されていますでしょうか? (手元の環境で大文字小文字が異なるように設定してみたところ、真っ黒な画面が表示されました)
coco7777

2022/04/25 12:44

回答ありがとうございます!! おっしゃる通りに大文字に変えるとブレイクポイントで緑色のラインが出ました!!ありがとうございます 以下の新たなエラーが出てAppDelegateのファイルに飛ばされます 最初の質問とは違うのですがこちらも最後に教えていただけませんか? "Storyboard (<UIStoryboard: 0x600002ca8900>) doesn't contain a view controller with identifier 'nikkiTableViewController'"
退会済みユーザー

退会済みユーザー

2022/04/25 13:06

```swift let secondVC = storyboard?.instantiateViewController( withIdentifier: "nikkiTableViewController" ) as! nikkiTableViewController ```` この部分ですが、Storyboardが分割されているために、「storyboard」からnikkiTableViewControllerを参照することができないのだと思います。 次のような感じで「nikkiTableView」という名前のStoryboardを生成してから参照してみたらどうでしょうか。 ```swift let storyboard2: UIStoryboard = UIStoryboard(name: "nikkiTableView", bundle: nil) let secondVC = storyboard2.instantiateViewController( withIdentifier: "nikkiTableViewController" ) as! nikkiTableViewController ``` ドキュメントも参照してみてください。 https://developer.apple.com/documentation/uikit/uistoryboard/1616216-init
coco7777

2022/04/26 14:17

ありがとうございます! 最初の画面に目的の画面を表示することができました! 新たなエラーが出たので、まず自分で考えてみてできなければまた質問させていただきます、その際はよろしくお願いします
coco7777

2022/05/19 06:58

ベストアンサーにさせていただきたいので、回答欄に記載をお願いします!
guest

回答1

0

ベストアンサー

コメントありがとうございます。
自己解決にしていただいても良かったのですが、
必要そうな内容を回答欄に入力してみます。


pageViewControllerのファイル名は小文字から始まると思いますが、
質問欄の実際のクラスの名前を見ると、大文字から始まる(PageViewController)ように見えます。
大文字小文字も間違いなく、IdentityインスペクタのCustom ClassのClassは設定されていますでしょうか?
(手元の環境で大文字小文字が異なるように設定してみたところ、真っ黒な画面が表示されました)


swift

1let secondVC = storyboard?.instantiateViewController( 2 withIdentifier: "nikkiTableViewController" 3) as! nikkiTableViewController

この部分ですが、Storyboardが分割されているために、「storyboard」からnikkiTableViewControllerを参照することができないのだと思います。
次のような感じで「nikkiTableView」という名前のStoryboardを生成してから参照してみたらどうでしょうか。

swift

1let storyboard2: UIStoryboard = UIStoryboard(name: "nikkiTableView", bundle: nil) 2let secondVC = storyboard2.instantiateViewController( 3 withIdentifier: "nikkiTableViewController" 4) as! nikkiTableViewController

ドキュメントも参照してみてください。
https://developer.apple.com/documentation/uikit/uistoryboard/1616216-init

投稿2022/05/19 08:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

coco7777

2022/05/19 13:05

回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問