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

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

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

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

解決済

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

coco7777
coco7777

総合スコア5

Swift

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

1回答

0評価

0クリップ

128閲覧

投稿2022/04/24 12:30

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

swift

import UIKit class PageViewController: UIPageViewController { private var controllers = [UIViewController]() override func viewDidLoad() { super.viewDidLoad() setupPageViewController() } private func setupPageViewController() { let firstVC = storyboard?.instantiateViewController( withIdentifier: "startViewController" ) as! startViewController let secondVC = storyboard?.instantiateViewController( withIdentifier: "nikkiTableViewController" ) as! nikkiTableViewController controllers = [firstVC, secondVC] setViewControllers([controllers[0]], direction: .forward, animated: true, completion: nil) self.dataSource = self } } extension PageViewController: UIPageViewControllerDataSource { func presentationCount(for pageViewController: UIPageViewController) -> Int { return controllers.count } //前に進む func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { if let index = controllers.firstIndex(of: viewController), index < controllers.count - 1 { return controllers[index + 1] } return nil } //後へ進む func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { if let index = controllers.firstIndex(of: viewController), index > 0 { return controllers[index - 1] } return nil } }

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

xg63ex2b

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の下に設定して ビルドした時に緑色のラインがでるということでしょうか?初心者なので相違があったらすみません。 ブレイクポイントを設定してビルドしても緑色のラインは出ませんでした。
xg63ex2b

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'"
xg63ex2b

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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