在segue期间从UINavigationController的导航堆栈中删除视图控制器?

bmt*_*033 1 uiviewcontroller uinavigationcontroller ios swift

我是iOS开发的新手,我正在构建一个由UINavigationController和三个ViewControllers组成的应用程序,我将其称为A,B和C.

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

  1. A> C.

  2. A> B> C.

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

我已经尝试通过在返回true之前调用shouldPerformSegue(withIdentifier)末尾的以下内容从导航堆栈中删除视图控制器B以允许segue继续:

self.navigationController?.viewControllers.remove(at: index)
Run Code Online (Sandbox Code Playgroud)

如果我正确阅读文档,要删除的视图控制器的索引对应于以下内容:

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
Run Code Online (Sandbox Code Playgroud)

不幸的是,我没有任何运气让它正常工作.我确定我做错了什么,但我不确定还有什么可以尝试的.谁能指出我正确的方向?谢谢!

Sag*_*ehi 6

你可以用这个:

var viewControllers = navigationController?.viewControllers

viewControllers?.removeLast(2) //here 2 views to pop index numbers of views

navigationController?.setViewControllers(viewControllers!, animated: true)
Run Code Online (Sandbox Code Playgroud)

你也可以这样删除..