gpt4 book ai didi

ios - 从导航堆栈弹出 ViewController

转载 作者:行者123 更新时间:2023-11-28 15:14:50 25 4
gpt4 key购买 nike

我正在学习 Apple Developer 的教程:Start Developing iOS Apps (Swift) ,我对推送和模态转场感到困惑。

有两种场景,导航栏中的保存和取消按钮,从场景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.")
}
}

在这个方法中,如果场景是由模态转场呈现的,dismiss(animated:completion:)被调用,并且如果场景是通过 push segue 呈现的,则调用 popViewController(animated:) 从导航堆栈中弹出 ViewController。

但对于“保存”按钮,教程重写了场景 2 中的方法 prepare(for:sender:) 和场景 1 中的操作方法 unwindToMealList(sender:)。并将保存按钮拖到退出(场景停靠栏中的按钮)并选择 unWindToMealList(sender:) 方法。所以流程将是:prepare(for:sender:) -> scene 2 dismissed and scene 1 presented -> unWindToMealList(sender:)

我想知道代码片段并没有明确地关闭场景 2 并在按下“保存”按钮时删除导航堆栈中的 ViewController。我知道模态 segue 不会将 ViewController 推送到导航堆栈,但 push segue 会推送它。为什么代码片段不会从导航堆栈中弹出?

非常感谢。

最佳答案

您正在阅读的教程似乎正在使用 unwind segues .

Unwind segues,就像普通的 segues 一样,有一个源和一个目标,你可以在 prepareForSegue 中为它做准备,但它不会显示目标 VC,它会关闭源 VC,这样显示目标 VC。

Unwind segues 在不同情况下表现不同。当您使用推送转场和从 B 到 A 的展开转场从 VC A 呈现 VC B 时,展开转场将从导航堆栈中弹出 VC B。当您从 VC A 模态呈现 VC B 时,展开转场将关闭模态呈现的 VC。

如您所见,unwind segues 非常聪明。它将自行决定如何显示目标 VC。它甚至可以在导航堆栈中弹出两个或更多 VC!

关于ios - 从导航堆栈弹出 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47029457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com