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

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

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

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

Swift

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

Q&A

1回答

396閲覧

pageviewcontrollerで複数ページスライドの実装エラー

yuyuyuka

総合スコア10

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/03/10 10:17

プログラミング初心者です。
1ページ内で複数のページを横スライドするためのコードを入れてみたのですが、
viewDidLoad()内のself.dateSource = self でエラーとなってしまいます。

Fixを押すとエラーはなくなりますがシミュレータで動かすと1ページ目のみの表示でスライドすることができません。。。

 

 

どうか教えてくださいm(_ _)m

import UIKit class PageViewController: UIPageViewController { override func viewDidLoad() { super.viewDidLoad() self.setViewControllers([getFirst()], direction: .reverse, animated: true, completion: nil) // 最初のviewControllerを設定している self.dataSource = self } func getFirst() -> FirstViewController { return storyboard!.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController //StoryBoard上のFirstViewControllerをインスタンス化している //withIdentifierはStoryBoard上で設定したStoryBoard Id } func getSecond() -> SecondViewController { return storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController } func getThird() -> ThirdViewController { return storyboard!.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { // 左に進む動き(前に戻る) if viewController.isKind(of: ThirdViewController.self)// 現在のviewControllerがThirdViewControllerかどうか調べる { // 3 -> 2 return getSecond() } else if viewController.isKind(of: SecondViewController.self) {// 現在のviewControllerがSecondViewControllerかどうか調べる // 2 -> 1 return getFirst() } else { // 1 -> end of the road return nil } } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { // 右に進む(先に進む) if viewController.isKind(of: FirstViewController.self)// 現在のviewControllerがFirstViewControllerかどうか調べる { // 1 -> 2 return getSecond() } else if viewController.isKind(of: SecondViewController.self) {// 現在のviewControllerがSecondViewCotrollerかどうか調べる // 2 -> 3 return getThird() } else { // 3 -> end of the road return nil // Do any additional setup after loading the view. } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ } }

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

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

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

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

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

guest

回答1

0

dataSourceにはUIPageViewControllerDataSourceプロトコルに準拠したクラスのインスタンスを入れる必要があります。

PageViewControllerクラスはその条件を満たしていないのでコンパイルエラーがでます。

class PageViewController: UIPageViewControllerDataSource

などと、プロトコルの準拠を明記してください。

Fixを押すとエラーはなくなりますがシミュレータで動かすと1ページ目のみの表示でスライドすることができません。。。

適切なタイミングで2ページ目の生成が実行されているかをブレークポイントなどを張って確かめてください。

投稿2019/03/11 02:24

takabosoft

総合スコア8356

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

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

yuyuyuka

2019/03/12 14:06

回答ありがとうございます!!何が足りていないのか分かりました! あとひとつ、質問で申し訳ないのですが、 class PageViewController: UIPageViewControllerDataSource というのはどこに書けばいいのでしょうか、、、 質問づくしですみません。。。m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問