私はApple Developerからチュートリアルを勉強しています:Start Developing iOS Apps (Swift)、私はプッシュとモーダルセグに混乱しています。ナビゲーションスタックからViewControllerをポップアップ
2つのシナリオ、[キャンセル]ボタンが押された場合には、シーン2退けるために別のメソッドを呼び出しますが、シーンからシーン1にバックアップ、2
を保存し、ナビゲーションバーで[キャンセル]ボタンをあります
@IBAction func cancel(_ sender: UIBarButtonItem) {
// Depending on style of presentation (modal or push presentation), this view controller needs to be dismissed in two different ways.
let isPresentingInAddMealMode = presentingViewController is UINavigationController
if isPresentingInAddMealMode {
dismiss(animated: true, completion: nil)
}
else if let owningNavigationController = navigationController{
owningNavigationController.popViewController(animated: true)
}
else {
fatalError("The MealViewController is not inside a navigation controller.")
}
}
は、
sceneがモーダルsegueで表示されている場合、dismiss(animated:completion :)が呼び出され、シーンがpush segueで表示される場合は 、ViewControllerをポップアップするためにpopViewController(animated :)が呼び出されます。ナビゲーションスタック。
しかし、[保存]ボタンの場合、チュートリアルはシーン2のメソッドをオーバーライドし、準備する(送信者:)と、シーン1のアクションメソッドunwindToMealList(送信者:)をオーバーライドします。 そしてSaveボタンをExit(シーンドックのボタン)にドラッグし、unWindToMealList(sender :)メソッドを選択します。 フローは次のようになります:prepare(for:送信者:) - > scene 2が破棄され、シーン1が表示されます - > unWindToMealList(送信者:)
シーン2とシーン2を明示的に却下していないのでしょうか?保存ボタンを押すと、ナビゲーションスタック内のViewControllerを削除します。 私は、モーダルセグがViewControllerをナビゲーションスタックに押し込まないことを知っていますが、push segueはプッシュします。 なぜコードスニペットがナビゲーションスタックからポップアップしないのですか?
多くのありがとうございます。
入手しました。ありがとう! – Nestarneal