8

让我们在这里说的观点是我的筹码布局的UINavigationController:如何删除堆栈

View3  --> Top of the stack 
View2 
View1 
HomeView --> Bottom of the stack 

于是我在View3现在,如果我点击Home按钮,我想加载HomeView,这意味着我需要弹出View3,View2View1。但如果我弹出View3,则会显示View2。我不想那样。我想要删除View3,View2View1,并且将显示HomeView。任何想法如何?

回答

16

您可以使用popToRootViewControllerAnimated:去根视图控制器。这会弹出堆栈中除根视图控制器之外的所有视图控制器。在你的情况下,这将是HomeView

[self popToRootViewControllerAnimated:YES]; 


要到特定视图在堆栈中,你可以使用popToViewController:animated:假设你要弹出第三视图 - 控制(自下而上)。在你的情况,这将是视图2

NSArray* viewControllersInStack = self.navigationController.viewControllers; 
UIViewController* targetViewController = [viewControllersInStack objectAtIndex:2]; 
[self.navigationController popToViewController:targetViewController animated:YES]; 
+0

我在示例中拥有homeview,但在我的代码中并不是这种情况。 TYVM :) – 2010-04-07 19:41:28

+0

我尝试过,但它说'HomeView'是未定义的,这是有道理的,因为我在'View3'中,所以我没有提及'HomeView',是吗? – 2010-04-07 19:48:11

+0

是的,你需要引用'HomeView',你可以通过'self.navigationController.viewControllers'属性获得 – 2010-04-07 19:57:41

2

使用popToViewController

​​
+0

它是如何工作的?文档说你弹出一个特定的viewController,但我不断收到seg故障。你觉得你可以给我一个快速的示例代码? – 2010-04-07 19:23:59

+0

它会弹出视图,直到特定的viewController位于堆栈的顶部。你可以发布错误日志和你的一些代码吗? – Bird 2010-04-07 19:39:17

+0

好吧,假设我在'aViewController'(假设它已经在堆栈中),我推入'bViewController',然后在'bViewController',我'popToViewController:aViewController',以及它说'aViewController'未定义,因为我现在在'bViewController'中,这是有意义的。我没有提及'aViewController'。我错过了什么吗? – 2010-04-07 19:44:42

0

使用...

[self.navigationController popToRootViewControllerAnimated:YES];