Swift 3:popToViewController无法正常工作

Fil*_*ipe 3 uinavigationcontroller ios poptoviewcontroller swift3

在我的应用程序中,我有三个表视图控制器,然后可能有许多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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Nir*_*v D 13

popToViewController不是以你正在尝试的方式工作而是传递一个完整的新引用FirstTableViewController而不是导航堆栈中的引用.所以你需要遍历navigationController?.viewControllers并查找FirstTableViewController然后popToViewController使用该实例调用FirstTableViewController.

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

如果你想转移到第一个屏幕,那么你可能正在寻找popToRootViewController而不是popToViewController.

_ = self.navigationController?.popToRootViewController(animated: true)
Run Code Online (Sandbox Code Playgroud)