双重返回上一个视图 - Swift
Posted
技术标签:
【中文标题】双重返回上一个视图 - Swift【英文标题】:Double return to previous view - Swift 【发布时间】:2018-12-11 15:17:25 【问题描述】:我是 ios 和 Swift 新手,所以不要判断解决方案是否简单。
我有三个ViewControllers
,比如 A、B 和 C。
我从 A -> NavigationController -> B -> NavigationController -> C
开始在特定情况下,我需要在没有看到 B 的情况下从 C 回到 A。有什么办法吗?
也许改变父导航控制器?也许我可以用每个当前视图打印堆栈? - 这将非常有帮助。 我尝试一个一个地关闭 C 和 B 视图,它可以工作,但是我们可以暂时看到 B 视图 - 所以这对我来说不是一个解决方案。 P.s:我正在使用 Modal 类型在控制器之间切换。
enter image description here
【问题讨论】:
你能展示一下你是如何展示视图控制器的吗? 每个场景之间添加导航控制器有什么需要? ***.com/questions/40091107/… 【参考方案1】:如果A
始终是第一个视图控制器,您可以这样做:
viewcontrollerC.navigationController?.popToRootViewController(animated: true)
此方法将堆栈弹出到第一个视图控制器,而不显示中间的那些
如果A
不是第一个viewController,你可以这样做:
viewcontrollerC.navigationController?。 popToViewController(viewControllerA, 动画: true)
如果您没有对viewControllerA
的引用,请在堆栈中搜索:
let viewControllerA: UIViewController?
for (let vc in (self.navigationController?.viewControllers ?? []))
//adust the test to find the appropriate controller
if vc.isKindOf(ViewControllerAClass.self)
viewControllerA = vc
break
if let viewControllerA = viewControllerA
self.navigationController?.popToViewController(viewControllerA, animated: true)
来源:https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621871-poptoviewcontroller
【讨论】:
谢谢,但不是,这只是项目的一部分 看起来不错,我确信这会有效,但事实并非如此。我在 self.navigationController?.viewControllers 中只有一个 viewController 你如何展示你的控制器? 请查看以下使用展开转场的解决方案。当然,如果您的所有视图都在导航视图堆栈上,则我的以下答案的这个答案将起作用。这意味着您使用 Show segue 类型来呈现它们,而不是像 Present Modally 或 Present as Pop Over 这样的任何其他类型。【参考方案2】:有两种方法可以实现这一目标。实现起来很简单,在 View Controller C 中,您可以在特定情况下调用以下函数:
navigationController?.popToRootViewController(animated: true)
这将弹出所有导航视图层次结构并带您回到根目录,即第一个视图控制器。
第二种方法是在要返回的视图控制器中定义展开方法。在视图控制器中,当您开始键入 unwind 时,在 Xcode 10 中您将获得自动完成以添加此 Swift Unwind Segue 方法。
@IBAction func unwindToA(_ unwindSegue: UIStoryboardSegue)
let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
在这个特定的问题中,假设您在 View Controller A 中添加了此方法,因为您想返回它。我假设您在视图控制器 C 上有一个按钮可以返回到 A。Controll+Drag 从按钮到视图控制器 A 的退出符号。unwindToA 方法将自动弹出。连接到它,你就完成了。当用户按下此按钮时,它将返回 2 个导航控制器到 A。
注意:通过这种方法,您可以返回到导航堆栈上的任何导航控制器,并且不仅限于根视图控制器。下面我是显示视图控制器上的出口的附加图片。
【讨论】:
以上是关于双重返回上一个视图 - Swift的主要内容,如果未能解决你的问题,请参考以下文章