我对iOS开发相当陌生,我正在构建一个由UINavigationController和三个ViewControllers组成的应用程序,我将它们称为A,B和C.在segue期间从UINavigationController的导航堆栈中移除视图控制器?
最初显示视图控制器A.从那里,我有两个工作流程:
A> C
A> B> C
在第二工作流中,我已经定义shouldPerformSegue(withIdentifier )在视图控制器B上。在这个方法的内部,我需要做一些工作来决定是否应该显示视图控制器C或取消搜索并显示错误消息。假设没有发生错误,则执行查看控制器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
不幸的是,我还没有得到任何运气得到这个才能正常工作。我确信我做错了什么,但我不确定还有什么可以尝试的。任何人都可以将我指向正确的方向吗?谢谢!
退房这个职位http://stackoverflow.com/questions/10822857/is-it-possible-to-pop-the -uinavigationcontroller两次。 – Adamsor
这是人们遇到的相当普遍的问题,但是对于我的(有限的)知识来说,没有简单的方法来修改内置后退按钮的功能。你可以考虑继承UINavigationController并覆盖它的pop方法来检查顶部视图控制器是否为C.如果是C,则用动画弹出一次,然后再弹出一次而不用动画。否则,只需弹出一次。 – Erik
'self.navigationController.popToRoot()'将解决您的问题 –