返回 swift 4 中的特定视图控制器
Posted
技术标签:
【中文标题】返回 swift 4 中的特定视图控制器【英文标题】:Back to specific view controller in swift 4 【发布时间】:2018-03-14 15:00:55 【问题描述】:假设我有五个视图控制器,我想转到特定的视图控制器
RootViewController ==> FirstViewController ==> SecondViewController ==> ThirdViewController ==> FourthViewController(模态显示有一个按钮) 以及我通过推送方法连接的所有其他控制器。 我的任务是我想在单击按钮时从 FourthViewController 转到 firstViewController。有什么帮助吗?
for controller in self.navigationController!.viewControllers as Array
if controller.isKind(of: HomeViewController.self)
self.navigationController!.popToViewController(controller, animated: true)
break
这是我做的代码。
【问题讨论】:
使用 poptoviewcontroller 并在使用 navigationcontroller 时指定 viewcontroller 查看***.com/questions/49050782/… 【参考方案1】:在 FourthViewController 中添加委托:
self.dismiss(animated: true)
self.delegate.popToFirstVC()
在 ThirdViewController 中添加 func popToFirstVC()
。
使用popToViewController:
func popToFirstVC()
if let firstViewController = self.navigationController?.viewControllers[1]
self.navigationController?.popToViewController(firstViewController, animated: true)
或更好
guard let viewControllers = self.navigationController?.viewControllers else
return
for firstViewController in viewControllers
if firstViewController is FirstViewController
self.navigationController?.popToViewController(firstViewController, animated: true)
break
还有这样的选择。 为此函数添加一个观察者并在必要时调用。 但我只会在最极端的情况下这样做。
func popToThisVC()
if let topController = UIApplication.topViewController()
topController.navigationController?.popToViewController(self, animated: true)
【讨论】:
viewControllers[1] 中的 1 是什么? 您的所有控制器都在导航堆栈中吗? 是的,我所有的导航控制器都在堆栈中 你有什么方法可以使用协议返回到特定的视图控制器,因为它总是适用于我的应用程序? 如果需要回到之前的VC,我觉得使用协议还是不错的。如果控制器很多,则需要将整个链从第一个 VC 转移到最后一个 VC,这在我看来不是很好。【参考方案2】:您提到了连接,因此我认为您使用了故事板和转场,在这种情况下,为什么不创建一个展开转场呢? 在这里仅通过文字向您展示 unwind segue 的 sn-p 有点困难,但我认为 Unwind segue blog from medium 有您的答案
【讨论】:
以上是关于返回 swift 4 中的特定视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
返回上一个 ViewController 不适用于 Swift 中的多个视图控制器