我是iOS开发的新手,正在构建一个包含UINavigationController和三个ViewController的应用程序,我将它们分别称为A,B和C。

最初显示了视图控制器A。从那里开始,我有两个工作流程:

  • A> C
  • A> B> C

  • 在第二个工作流中,我在视图控制器B上定义了shouldPerformSegue(withIdentifier)。在此方法内部,我需要做一些工作来决定是否应该显示视图控制器C或取消segue并显示错误消息。假定没有错误发生,将执行到视图控制器C的设置。当显示视图控制器C时,后退按钮指向视图控制器B,但是我需要它指向视图控制器A。

    我试图通过在shouldPerformSegue(withIdentifier)末尾调用以下命令,从导航堆栈中删除视图控制器B,然后返回true以允许segue继续进行:
    self.navigationController?.viewControllers.remove(at: index)
    

    如果我正确阅读了文档,则要删除的视图控制器的索引对应于以下内容:
    The root view controller is at index 0
    The back view controller is at index n-2
    The top view controller is at index n-1
    

    不幸的是,我没有运气让它正常工作。我确定自己做错了什么,但不确定要尝试什么。谁能指出我正确的方向?谢谢!

    最佳答案

    您可以使用此:

    var viewControllers = navigationController?.viewControllers
    
    viewControllers?.removeLast(2) //here 2 views to pop index numbers of views
    
    navigationController?.setViewControllers(viewControllers!, animated: true)
    

    您也可以像这样删除。

    关于ios - 在Segue期间从UINavigationController的导航堆栈中删除 View Controller ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40975451/

    10-14 21:33
    查看更多