2016-12-05 105 views
0

我对iOS开发相当陌生,我正在构建一个由UINavigationController和三个ViewControllers组成的应用程序,我将它们称为A,B和C.在segue期间从UINavigationController的导航堆栈中移除视图控制器?

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

  1. A> C

  2. 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 

不幸的是,我还没有得到任何运气得到这个才能正常工作。我确信我做错了什么,但我不确定还有什么可以尝试的。任何人都可以将我指向正确的方向吗?谢谢!

+0

退房这个职位http://stackoverflow.com/questions/10822857/is-it-possible-to-pop-the -uinavigationcontroller两次。 – Adamsor

+0

这是人们遇到的相当普遍的问题,但是对于我的(有限的)知识来说,没有简单的方法来修改内置后退按钮的功能。你可以考虑继承UINavigationController并覆盖它的pop方法来检查顶部视图控制器是否为C.如果是C,则用动画弹出一次,然后再弹出一次而不用动画。否则,只需弹出一次。 – Erik

+0

'self.navigationController.popToRoot()'将解决您的问题 –

回答

2

您可以使用此:

var viewControllers = navigationController?.viewControllers 

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

navigationController?.setViewControllers(viewControllers!, animated: true) 

可以去除这样也..

0

您可以创建自定义的后退按钮并在其touchUpInside事件,你可以弹出特定的视图控制器。

要弹出特定的视图控制器,你可以使用此代码:

your_navigationController?.popToViewController(YourViewControllerObject, animated: true) 
相关问题