返回 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 中的特定视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

更改所有类的所有视图控制器的背景颜色(swift 4)

使用 swift 4 退出应用程序并返回主屏幕

返回上一个 ViewController 不适用于 Swift 中的多个视图控制器

Swift - 从模型中的 API 调用返回 JSON 对象作为字典以在视图控制器中使用

如何强制返回按钮转到第一个视图控制器(swift)

在 Swift 中的页面视图控制器内的视图控制器之间传递数据