3

我想將視圖推入導航控制器堆棧,但刪除當前的視圖,以便當用戶按下下一個視圖時不會將它們帶到前一個視圖。如何將視圖推送到導航堆棧並刪除當前的?

在一個方向流動可能是其中之一:

View X -> View 1 -> View 2 -> View 3  
View X -> View 1  ->  View 3 

但在oposite方向的流量一直是這樣的:

View X <- View 1  <-  View 3 

的問題是,我想處理它在View 2控制器上,在View 3上執行操作很容易覆蓋後退按鈕操作。視圖3可以有很多不同的視圖,我不想覆蓋所有視圖的後退按鈕,並檢查堆棧的前一個控制器是否爲視圖2控制器。它們都具有相同的父類,所以我無法僅爲'View 3 class'控制器覆蓋後退按鈕。

我已經試過這使視圖2的控制器不加入到導航堆棧:

//Pop controller from stack before pushing 
[self.navigationController popViewControllerAnimated:YES]; 
[self.navigationController pushViewController:controller animated:YES]; 

但是,一旦你彈出它刪除了該視圖,不推到下一個控制器

具有相同的結果

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 
[viewControllers removeObjectIdenticalTo:self]; 
self.navigationController.viewControllers = viewControllers; 
[self.navigationController pushViewController:controller animated:YES]; 
+0

你需要使用展開賽格。 – Fogmeister

+0

對不起,我忘記提及它必須與5.1 – pablobart

+0

兼容啊,那麼唯一的方法就是彈出兩次。你不能直接找你想要的東西,但你可以調用popViewController兩次,或者你可以做popToViewController並通過視圖1直接回到視圖1. – Fogmeister

回答

10

在問候你的最後一個例子是不推其他的選擇,工作的呢?

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 
[viewControllers removeObjectIdenticalTo:self]; 
[viewControllers addObject:controller]; 
[self.navigationController setViewControllers: viewControllers animated: YES]; 

既然你設置控制器控制器的陣列,而不自己,你可能會被你的navigationController屬性設置爲nil,使你無法後立即推新。無論如何,嘗試並沒有什麼壞處。

+0

是的!!,工作!它用導航欄的標題做了一個奇怪的效果(它有點自定義),但至少是移動到下一個視圖並返回到正確的視圖,所以它似乎是一種方式。謝謝! – pablobart

+0

@pablobart很高興我能幫到你。 :) – Metabble

相關問題