メソッドで前の画面に戻らないパターンがあります。
なぜ前の画面に戻ってくれないのか、戻すにはどうしたら良いのか教えてください。
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 } }
回答2件
あなたの回答
tips
プレビュー