【问题标题】:Back to specific view controller in swift 4返回 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
        }
    }

这是我做的代码。

【问题讨论】:

标签: ios swift uiviewcontroller uinavigationcontroller


【解决方案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 有您的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2015-05-13
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多