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

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

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

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

Swift

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

Q&A

解決済

2回答

973閲覧

dismissで前の画面に戻らない

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

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

Swift

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

0グッド

1クリップ

投稿2018/03/23 02:07

編集2018/03/23 02:41

メソッドで前の画面に戻らないパターンがあります。
なぜ前の画面に戻ってくれないのか、戻すにはどうしたら良いのか教えてください。

storyboardは以下の通り。
Appleチュートリアルからいじったものなんですが、

  • リスト画面
  • テーブルセルの登録・編集画面
  • 設定画面

の3つで構成しています。

イメージ説明

設定画面から保存後にリスト画面に戻るとき、dismissではなく
self.present(firstview, animated: true, completion: nil)
を使って遷移しています。

すると、以下の動作の時キャンセル押下時にリスト画面に戻って欲しいのですが、
何故か設定画面が表示されてしまします。
リスト画面→設定画面→リスト画面→登録画面、☆キャンセル押下
キャンセル押下時にはdismissを呼んでいます。
キャンセルメソッド内をデバッグしてself.navigationController?.viewControllersの中を見たのですが、[0]にリスト画面、[1]に登録画面が入っていて、問題ないように見えました。

ちなみに設定画面の保存ボタン押下時の動作をdismissに変更すると想定どおりの動きになります。
設定画面でdismissを使っていない理由は、設定内容を反映するためにリスト画面のviewDidLoadを呼び出したいからです。

###追記:リスト画面の画面イメージ
+を押すと登録画面へ、各セルを押すと登録画面(編集モード)へ遷移するようになっています。
イメージ説明

###追記
tableviewcontrollerで以下の処理をしています。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { super.prepare(for: segue, sender: sender) switch (segue.identifier ?? "") { case "AddItem": os_log("Adding a new meal.", log: OSLog.default, type: .debug) case "ShowDetail": guard let mealDetailViewController = segue.destination as? MealViewController else { fatalError("Unexpected destination: (segue.destination)") } guard let selectedMealCell = sender as? MealTableViewCell else { fatalError("Unexpected sender: (sender)") } guard let indexPath = tableView.indexPath(for: selectedMealCell) else { fatalError("The selected cell is not being displayed by the table") } let selectedMeal = meals[indexPath.row] mealDetailViewController.meal = selectedMeal default: break } }

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

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

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

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

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

fuzzball

2018/03/23 02:16

どれがリスト画面なのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/23 02:18

viewcontrollerのcontainerviewで表示していますが、画像のtableviewです。
fuzzball

2018/03/23 02:20

あぁ、ContainerView使ってるんですね。了解です。
fuzzball

2018/03/23 02:30

View Controller <-> Your Mealsは、なぜ繋いでいるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/23 02:34

ViewControllerにはもう一つContainerViewを置いていて、そこをNavigationControllerに繋いでいます。Navigationにあるボタンから`show`で繋いでいます。
fuzzball

2018/03/23 02:37

画像を見ると、View Controller と Your Meals が直接繋がっているように見えますが?
退会済みユーザー

退会済みユーザー

2018/03/23 02:42

チュートリアル通りなのであまり処理の意味はわかっていないのですが、tableviewcontroller内のprepareメソッド内で質問に追記したような処理を行っています。
fuzzball

2018/03/23 02:45 編集

いや、コードではなくStoryboard上の話ですよ。View ControllerとYour Mealsがセグエで繋がってますよね?これもチュートリアルのままですか?ViewControllerと上のNavigationControllerが繋がっているのもチュートリアルのままですか?
退会済みユーザー

退会済みユーザー

2018/03/23 02:51 編集

storyboardではnavigationcontrollerにある+からYourMealsに向けてshowでつなぎました。それがviewcontrollerから直接つながっているように見えているのだと思うのですが… ちなみにリスト画面をContainerViewで構成するようにしたのは独自処理です。
fuzzball

2018/03/23 02:57

回答に画像貼ったので見て下さい。
退会済みユーザー

退会済みユーザー

2018/03/23 03:03

あ、ごめんなさい勘違いしてました。その繋がりはContainerviewとtableviewcontrollerのものです。その上の繋がりはもう一つのContainerviewとNavigationControllerのものです。
fuzzball

2018/03/23 03:49

ContainerView → NavigationController → TableViewController と繋がっているので、ContainerViewとTableViewControllerは繋がなくていいです。NavigationControllerの理解がちょっと足りていないように思います。(右上のNavigationControllerも???です)
退会済みユーザー

退会済みユーザー

2018/03/23 03:53

ありがとうございます。そのあたり少し調べてみます。
guest

回答2

0

ベストアンサー

解決かどうかはわかりませんが。
storyboardを以下の構成に変更しました。
設定画面にはナビゲーションを使わず、ボタンでの画面遷移に切り替えています。
イメージ説明

これで画面遷移は想定通りの動きになりました。

投稿2018/03/23 04:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

これ、繋がっているように見えているだけですか?

sb

投稿2018/03/23 02:56

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問