双 return 到上一个视图 - Swift
Double return to previous view - Swift
我是 IOS 和 Swift 的新手,所以不要判断解决方案是否容易。
我有三个 ViewControllers
,比如 A、B 和 C。
我从 A -> NavigationController -> B -> NavigationController -> C
开始
在特定情况下,我需要从C 回到A 而看不到B。有什么办法可以做到这一点?
也许改变父导航控制器?也许我可以打印每个当前视图的堆栈? - 这真的很有帮助。
我试着一个一个地关闭 C 和 B 视图,它起作用了,但我们可以暂时看到 B 视图——所以这对我来说不是一个解决方案。
P.s :我正在使用模态类型在控制器之间切换。
enter image description here
如果 A
总是第一个视图控制器,你可以这样做:
viewcontrollerC.navigationController?.popToRootViewController(animated: true)
此方法将堆栈弹出到第一个视图控制器,而不显示中间视图控制器
如果A
不是第一个viewController,你可以这样做:
viewcontrollerC.navigationController?。 popToViewController(viewControllerA, animated: 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
您可以通过两种方式实现这一目标。实现起来很简单,在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
}
在这个特定的问题中,假设您在视图控制器 A 中添加了此方法,因为您想返回它。我假设你在 View Controller C 上有一个返回 A 的按钮。Controll+从按钮拖动到 View Controller A 的 Exit 符号。unwindToA 方法将自动弹出。连接到它,你就完成了。当用户按下这个按钮时,它将返回 2 个导航控制器到 A.
注意:通过这种方法,您可以返回到导航堆栈上的任何导航控制器,而不仅限于根视图控制器。下面我是显示视图控制器上的出口的附加图片。
我是 IOS 和 Swift 的新手,所以不要判断解决方案是否容易。
我有三个 ViewControllers
,比如 A、B 和 C。
我从 A -> NavigationController -> B -> NavigationController -> C
开始在特定情况下,我需要从C 回到A 而看不到B。有什么办法可以做到这一点?
也许改变父导航控制器?也许我可以打印每个当前视图的堆栈? - 这真的很有帮助。 我试着一个一个地关闭 C 和 B 视图,它起作用了,但我们可以暂时看到 B 视图——所以这对我来说不是一个解决方案。 P.s :我正在使用模态类型在控制器之间切换。
enter image description here
如果 A
总是第一个视图控制器,你可以这样做:
viewcontrollerC.navigationController?.popToRootViewController(animated: true)
此方法将堆栈弹出到第一个视图控制器,而不显示中间视图控制器
如果A
不是第一个viewController,你可以这样做:
viewcontrollerC.navigationController?。 popToViewController(viewControllerA, animated: 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
您可以通过两种方式实现这一目标。实现起来很简单,在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
}
在这个特定的问题中,假设您在视图控制器 A 中添加了此方法,因为您想返回它。我假设你在 View Controller C 上有一个返回 A 的按钮。Controll+从按钮拖动到 View Controller A 的 Exit 符号。unwindToA 方法将自动弹出。连接到它,你就完成了。当用户按下这个按钮时,它将返回 2 个导航控制器到 A.
注意:通过这种方法,您可以返回到导航堆栈上的任何导航控制器,而不仅限于根视图控制器。下面我是显示视图控制器上的出口的附加图片。