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];