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

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

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

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

Q&A

解決済

2回答

1538閲覧

navigation controlleからModalで遷移して戻る方法

Yeezy21

総合スコア21

Swift

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

0グッド

0クリップ

投稿2019/02/13 14:48

編集2019/02/14 06:38

前提・実現したいこと

A viewController(Embed in Navigation Controller) -> B viewController -> C View Controller(Embed in navigation Controller)という階層なのですがC viewControllerからB ViewControllerへは戻ることができるのですが、C viewControllerからA viewControllerへはどうすれば戻ることができます?
イメージ説明

発生している問題・エラーメッセージ

CからAへ戻れない Bにしか戻れない 下のコードだとCのnavigation Contorllerを消すことしかできないのはわかるのですが、Bのview controllerの取得の方法がわからない Bを取得できれば let bVC = B viewController let navigation = bVC.navigationContorller navigation.popToRootViewController(true) で戻れると思うのですが... お力を貸してください!

該当のソースコード

swift

1@objc func close(_ sender: UIButton) { 2 self.dismiss(true, nil) 3} 4

swift

1override func unwind(for unwindSegue: UIStoryboardSegue, towards subsequentVC: UIViewController) { 2 print(subsequentVC) 3 }

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

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

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

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

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

fuzzball

2019/02/14 02:18

どれがAだかBだかCだか分からないのですが。
fuzzball

2019/02/14 02:19

出来るかどうかは別にして、そういう標準的/一般的でない遷移はすべきではないです。
Yeezy21

2019/02/14 05:58

わかりにくくてすみません。左のViewContorllerがA、真ん中のViewControllerがB、一番右がC ViewControllerとなります。 はい、変則的な偏移だとはわかっているのですがCのViewContorllerから画面遷移が二回あり、試行錯誤した結果こういう遷移方法になりました。 他にいい遷移方法があると思うのでその質問はまたさせていただきます。
guest

回答2

0

ベストアンサー

Cを呼び出しているBが無くなってしまうと帰るところが無くなってしまうので、CをNav(A)から呼び出すようにします。

text

1[Nav(A)] - [B] - [Nav(C)]

text

1[Nav(A)] - [B] 2 | 3 +- [Nav(C)]

に変更します。

で、Bでボタンを押したときに、

swift

1//Cを呼び出す 2self.navigationController?.performSegue(withIdentifier: "C", sender: nil) 3//(Cの裏で)Bを閉じてAに戻る 4self.navigationController?.popViewController(animated: true)

を実行します。
※ popするタイミングはここだとマズイかも知れないので、その場合は、
※ Cが表示しきってから(viewDidAppear(_:)で)popして下さい。

Cでボタンを押したときは、普通に、

swift

1self.dismiss(animated: true, completion: nil)

で閉じます。

投稿2019/02/14 06:46

編集2019/02/14 06:48
fuzzball

総合スコア16731

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

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

Yeezy21

2019/02/14 07:04

なるほど! 確かに根本の部分を変えれば簡単にできそうですね! 今まで気づかなかったのがバカでした。 詳しく回答していただき本当にありがとうございました! fuzzballさんのおかげで実装できそうです!
Yeezy21

2019/02/14 07:17

無事実装できました!! 本当にありがとうございます!!
guest

0

キーワードは「Unwind Segue」です。
具体的な実装方法などググれば出てきます。

投稿2019/02/14 01:28

t_obara

総合スコア5488

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

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

Yeezy21

2019/02/14 05:59

回答ありがとうございます。 具体的な実装方法が途切れてしまっています...(泣)
Yeezy21

2019/02/14 06:08

偏移先のC ViewControllerの戻るボタンからUnwind Segueを付けて、unwind関数を使いsubsequentVCを取得したのですが、NavigationControllerとなってしまいその先のB viewContorllerを取得することができませんでした。
t_obara

2019/02/14 06:13

具体的な実装方法はググってください、一杯見つかるはずです。 ちなみに、「unwind関数を使いsubsequentVCを取得した」や「NavigationControllerとなってしまいその先のB viewContorllerを取得」の意味がわからないので、試したコードや内容を質問の本文に追記して見てはいかがでしょうか。 Unwind Segueで、Bは必要なく、CとAを繋ぎたいのですよね。
Yeezy21

2019/02/14 06:43

はい、CとAを繋ぎたいです。 navigationControllerをCにEmbed inしなくてCからpresentingViewContorllerで遷移元のViewControllerを取得し、dismissで戻ろうかなと思ってきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問