弹出旧视图控制器

Posted

技术标签:

【中文标题】弹出旧视图控制器【英文标题】:Pop old viewController 【发布时间】:2017-02-09 23:06:44 【问题描述】:

所以我有 3 个视图控制器(和一个导航视图控制器)。从 VC1 开始,我推送到 VC2,然后当 VC2 的场景完成时,我弹出 VC2,然后推送到 VC3。唯一的问题是用户可以看到堆栈推送/弹出。无论如何我可以推VC3然后弹出VC2而不被注意吗?我知道它是一个堆栈,因此您不一定可以像数组一样选择元素,但也许有一种方法可以从 VC3 中弹出 VC2?

我看到了一些 *** 资源,但都是 2011-2014 年的旧语法,并且非常过时。有人有什么想法吗?

【问题讨论】:

将 VC2 留在原处,然后按 VC3。但是当你想离开 VC3 时,弹出到 VC1。你会得到同样想要的效果。 顺便说一句 - 2011-2014 年的解决方案仍然有效。只需根据需要转换为 Swift 3。 我会这样做的。但我也需要忽略 VC2 中呈现的场景。当我在 10 分钟前发布此消息时,它似乎可以正常工作,但现在我已经提高了音量,但它没有。我应该这样做:self.viewcontroller?.presentScene(nil) 然后推送到 VC3? 【参考方案1】:

是的,你可以。您可以使用setViewControllers:animated: 方法。像这样:

navigationController?.setViewControllers([vc1, vc3], animated: true)

这将在从堆栈中删除 vc2 并将其替换为 vc3 时为推送设置动画。更多关于方法here的信息。

更新:

如果您在 v2 中没有对 vc1 的引用(而且您可能没有),您可以这样做:

navigationController?.setViewControllers(navigationController!.viewControllers.first!, vc3], animated: true)

哦,如果您希望在没有任何动画的情况下推送 vc3,那么显然,只需使用 animated: false 调用该方法即可。

【讨论】:

以上是关于弹出旧视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

从弹出控制器推送视图控制器

弹出视图控制器、关闭视图控制器和使用展开转场有啥区别?

弹出框控制器无法正确显示视图

如何从弹出视图中关闭第二个视图控制器

从另一个导航控制器弹出视图控制器到另一个视图控制器

弹出视图控制器,然后同时关闭前一个视图控制器