gpt4 book ai didi

ios - 以编程方式定义新的导航 Controller 顺序/堆栈?

转载 作者:行者123 更新时间:2023-11-28 12:49:44 25 4
gpt4 key购买 nike

我有一个 NavigationController,其中嵌入了以下 VC:VC1 -> VC2 -> VC3 -> VC4 -> VC5。我的问题是,当我从 VC5 继续(编辑完成后)时,我将您发送回 VC3,但我想以编程方式将 VC4 和 VC5 从堆栈中删除,即当用户被发送回 VC3 时,我想要“返回” "在 navagitionBar 中将您带到 VC2(而不是您真正来自的 VC5)。

这在 IOS 中经常出现,您想要编辑模型,然后将它们发送回 tableView/Collection View ,但是由于编辑完成,您不再希望在导航堆栈中编辑 viewControllers,因为它的用户体验太困惑了。

在下面的截图中,右上角的VC是VC5:enter image description here通过 self.performSegueWithIdentifier("backToPins", sender: self)

返回到 PinViewController (VC3)

我该怎么做?

最佳答案

不要使用 segue 返回 (pop)。

您应该使用 popToViewController 并将特定的 viewcontroller 作为参数传递给弹出该 viewcontroller。

例如,如果你想继续使用五个中的第三个 View Controller ,那么你可以执行如下操作。您只需更改 viewcontroller 数组中的索引即可转到不同的 View Controller 。

let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true);

如果您正在使用 segue,这意味着您将新的 View Controller 添加(推送)到导航堆栈。在您的示例中,到达第 5 个 View 后您的堆栈就像是,

VC1 - VC2 - VC3 - VC4 - VC5(栈顶)

现在如果你执行 segue 回到 VC3 那么堆栈应该是这样的,

VC1 - VC2 - VC3 - VC4 - VC5 - VC3(栈顶)

如果你弹出到 VC3,那么你的堆栈就像,

VC1 - VC2 - VC3(堆栈顶部)

所以 pop viewcintrollers 返回不要使用 segue

希望这会有所帮助:)

关于ios - 以编程方式定义新的导航 Controller 顺序/堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824524/

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