如何清除导航堆栈以使后退按钮不出现?

Posted

技术标签:

【中文标题】如何清除导航堆栈以使后退按钮不出现?【英文标题】:How to clear the navigation stack so the back button doesn't appear? 【发布时间】:2016-11-28 19:20:02 【问题描述】:

这就是我的视图控制器在情节提要中的结构:

navController1 -> viewController1 -> viewController2 -> viewController3

我有一个从viewController3 回到viewController1 的转场。因此,当用户切换到viewContoller1 时,导航栏上会显示后退按钮(如预期的那样)。但是,就我而言,我不希望用户从viewController1 回到viewController3。我想再次从viewController1 重新开始。有没有办法在过渡到viewController1后清空堆栈,让后退按钮不出现?

(请注意,navController1 不是我的根控制器,我之前还有一些其他控制器。)

【问题讨论】:

【参考方案1】:

你有 navigationController 成员。它实际上是推入控制器的堆栈。清除堆栈,你应该得到你想要的结果。为此,在您的最后一个视图控制器中为 navigationController?.viewControllers 设置一个空列表。希望这能帮助您找到解决方案。

【讨论】:

虽然有时我需要后退按钮才能显示在视图控制器 1 上。只有当我从 viewcontroller3 出发时,我现在才需要后退按钮。那么我可以在 viewcontroller3 的 prepareForSegue 方法中应用你的代码吗? 您可以在 View Controller 中随意修改堆栈。堆栈可以清空也可以修改(例如,如果您有 4 个视图控制器,则可以删除其中的 2 个)。如果您需要更复杂的情况,您应该从我的提示开始尝试。请记住,导航控制器的左右按钮还有 2 个列表。您也可以在这些列表中添加和删除按钮。 谢谢。如何在 viewController1 中判断我来自 viewController3?抱歉,我对 Swift 很陌生。 没问题 :-) ... 在我之前提到的堆栈中,您可以删除不再需要的视图控制器。例如,如果堆栈中有 vc1、vc2、vc3 和 vc4,则可以从堆栈中删除 navigationController?.viewControllers vc2 和 vc3,因此,当您从 vc4 中单击返回按钮时,您将直接返回到 vc1,跳过 vc2 和 vc3。如果您使用故事板,那么您需要一个稍微不同的解决方案......但它看起来并不适合您。 我尝试了一些东西,但没有运气。如果我删除所有视图控制器,我的整个导航栏就会消失。我还尝试了 removeLast(),它在转换时会引发错误。无论如何,您可以向我展示一些关于当(且仅当)我从 viewcontroller3 到达 viewcontroller1 时如何隐藏后退按钮的代码?

以上是关于如何清除导航堆栈以使后退按钮不出现?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 清除导航栏

如何清除导航堆栈?

按下后退按钮时如何删除堆栈中的所有活动

导航到Android中的另一个片段后如何清除导航堆栈

如何在 Flutter 中弹出时清除页面

如何清除nativescript-vue手动路由的导航历史记录?