2012-11-09 98 views
2

我有3個viewControllers,從第一個我去第二個,從第二個到第三個。我可以更改UINavigationController viewControllers堆棧嗎?

我想從第三個視圖控制器回到第一個。

一個解決方案,我發現是創建一個自定義按鈕,然後裝回按鈕,這樣我完成我自己的選擇,並回到firstVC。但我創建的按鈕看起來不像後退按鈕。

所以一個解決方案,我想的是:

一旦我進入第三視圖控制器,改變在navigationController的viewControllers陣列移除所述第二視圖控制器。這樣它將返回到第一個而不更改後退按鈕。

這可能嗎?我可以隨意更改UINavigationController堆棧嗎?

在此先感謝

回答

1

我不知道你在做什麼的細節,但是當用戶希望返回一次後退按鈕時,你想避免返回兩次。我認爲一個好的解決辦法是對這個觀點採取一些其他行動。

所以我從你說,如果用戶進入這一觀點,他們需要回到起點,不能回到第二視圖控制器承擔。在第三個VC中,我會完全隱藏後退按鈕或導航欄,然後在視圖上有另一個按鈕,顯然會執行一些操作,然後您只需popToRootViewController即可。

+0

第二個VC是進行搜索的VC,第三個是顯示搜索結果。因此,當用戶完成結果時,我希望他回到主頁而不是搜索字段。我也會有一個像「重做搜索」的按鈕,但我認爲後退按鈕應該把他帶回家。思考? – pedros

+0

搜索可能是彈出的模式視圖控制器,當您選擇時,它會在將結果視圖控制器壓入堆棧時解除。這聽起來像是更符合你的用戶流程,你不需要做這個破解工作。 – rooster117

+0

我最終按照你的建議去做,使用模式進行搜索並在堆棧中添加結果。非常感謝。 – pedros

1

你可以嘗試從堆棧中刪除第二個視圖控制器,並檢查它。不應該是一個問題。

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; 
[array removeObjectAtIndex:1]; 

self.navigationController.viewControllers = array; 

或者只是使用

[self.navigationController setViewControllers:array animated:NO]; 

但這不是推薦的方法,因爲用戶可能會感到困惑。所以當你這樣做時要小心。

+1

我會在我的項目中試試這個。 – pedros

3

你可以,有一個特殊的方法 - [UINavigationController setViewControllers:animated:]

相關問題