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

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

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

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

Q&A

解決済

1回答

2313閲覧

ページ移動の際に値を渡したい。

torkia

総合スコア24

Swift

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

0グッド

0クリップ

投稿2017/11/22 11:08

編集2017/11/22 11:13

swift3で、tableViewのセルからindex番号にて画面遷移をし、遷移先のViewController同士だけでスワイプでページが移動できるようにし、その際に値を一緒に渡したいのですが、やり方が分からず、行き詰まっております。

tableviewにはNavigation ControllerをEmbedしており、セルから遷移した各viewからはbackボタンでtableViewに戻れるようにしています。
セルから遷移させるviewは5つあり(FirstVC~FifthVC)、この5つのview間をページめくりさせ、次のページ内容を表示させるために必要な値(セルから遷移する際に使ったindex番号)を渡したいです。

ご教授頂ければ大変助かります。
宜しくお願い致します。

![イメージ説明]

■ 試して見たこと
・PageViewControllerを使おうとしたのですが、先頭(is Initial)にしていないからか、全く反映されておらず、途中のページからPageViewControllerを利用する方法が分からず断念。

・Swipe Gesture Recognizerを使ってみたら、右開きしかできず、左開きの方法が分からず断念。

PageViewControllerの使い方を記述してあるサイトを参考にして記述したコードです。
この状態ではページ移動は反映されていません。
xcode8 swift3 使用

//PageViewController.swift //swift3 import UIKit class PageViewController: UIPageViewController { override func viewDidLoad() { super.viewDidLoad() self.setViewControllers([getFirst()], direction: .forward, animated: true, completion: nil) self.dataSource = self } func getFirst() -> FirstViewController { return storyboard!.instantiateViewController(withIdentifier: "ViewController") as! FirstViewController } func getSecond() -> SecondViewController { return storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController } func getThird() -> ThirdViewController{ return storyboard!.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController } func getFourth() -> FourthViewController{ return storyboard!.instantiateViewController(withIdentifier: "FourthViewController") as! FourthViewController } func getFifth() -> FifthViewController{ return storyboard!.instantiateViewController(withIdentifier: "FifthViewController") as! FifthViewController } } extension PageViewController : UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { if viewController.isKind(of: FifthViewController.self) { // 5 -> 4 return getFourth() } else if viewController.isKind(of: FourthViewController.self) { // 4 -> 3 return getThird() } else if viewController.isKind(of: ThirdViewController.self) { // 3 -> 2 return getSecond() } else if viewController.isKind(of: SecondViewController.self) { // 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) { // 1 -> 2 return getSecond() } else if viewController.isKind(of: SecondViewController.self) { // 2 -> 3 return getThird() } else if viewController.isKind(of: ThirdViewController.self) { // 3 -> 4 return getFourth() } else if viewController.isKind(of: FourthViewController.self) { // 4 -> 5 return getFifth() }else{ // 3 -> end of the road return nil } } } コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず各VC内に

swift

1FirstViewController: ViewController { 2 var index = 0 3}

みたいにindexを格納する変数を置いてあげたあとgetFirst()~getFifth()

swift

1func getFirst(index:Int) -> FirstViewController { 2 let VC = storyboard!.instantiateViewController(withIdentifier: "ViewController") as! FirstViewController 3 VC.index = index 4 return VC 5}

みたいにindexを格納する変数を置いてあげて、VCを呼び出す関数を使う時にindexを入れてあげたらいいんじゃないでしょうか。

投稿2017/12/10 06:59

xAxis

総合スコア1349

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

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

torkia

2017/12/11 15:44

ご回答ありがとうございます。 教えて頂いたコードを記述してみたのですが、エラーがでてしまいます。 self.setViewControllers([getFirst()], direction: .forward, animated: true, completion: nil) の[getFirst()]と、viewControllerBefore/Afterのところの戻り値 return getFirst() ... などのところの()部分にエラーがでます。なので、()内に index: Int と記述したところ、今度は Int にエラーがでてしまいます。エラーを出さないようにするにはどうしたらいいのか教えて頂けると大変助かります。
xAxis

2017/12/13 00:48

えーと、じゃあ「引数」とか「デフォルト引数」とか「関数に値を渡す」って分かりますか?
torkia

2017/12/13 07:32

勉強不足ですいません。 なんとかindexを渡すことはできました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問