Swift 3:popToViewController无法正常工作

时间:2017-04-21 09:35:59

标签: ios swift3 uinavigationcontroller poptoviewcontroller

在我的应用程序中,我有三个表视图控制器,然后可能有许多UIViewControllers,如果用户在任何时候按下,则每个UIViewControllers都必须返回到第一个表视图控制器。我不希望用户必须回溯可能数百页。这是我有趣的,以确定用户是否按下后退按钮,它的工作原理是打印消息

override func viewWillDisappear(_ animated: Bool) {
    if !movingForward {
        print("moving back")
        let startvc = self.storyboard!.instantiateViewController(withIdentifier: "FirstTableViewController")
        _ = self.navigationController!.popToViewController(startvc, animated: true)
    }
}

我已经搜索过,到目前为止还没有任何解决方案。

3 个答案:

答案 0 :(得分:12)

popToViewController无法按照您尝试的方式工作,而是传递FirstTableViewController的完整新引用,而不是导航堆栈中的引用。因此,您需要遍历navigationController?.viewControllers并找到FirstTableViewController,然后使用popToViewController的实例调用FirstTableViewController

for vc in (self.navigationController?.viewControllers ?? []) {
    if vc is FirstTableViewController {
        _ = self.navigationController?.popToViewController(vc, animated: true)
        break
    }
}

如果您要转到首屏,那么您可能正在寻找popToRootViewController而不是popToViewController

_ = self.navigationController?.popToRootViewController(animated: true)

答案 1 :(得分:1)

试试这个:

$a

答案 2 :(得分:0)

如果您在回调中,尤其是在异步网络回调中,则可能不在主线程上。如果那是您的问题,解决方案是:

DispatchQueue.main.async {
    self.navigationController?.popToViewController(startvc, animated: true)
}

总是在主线程上调用系统调用viewWillDisappear()