2011-08-22 59 views
0

我有3個viewControllers A,B和CiPhone - 的viewController調用的viewController

我在VCA和我使用

[self.navigationController pushViewController:vcB animated:YES]; 

雖然VCB是可見的,我推VCC推VCB。

現在我裏面VCC,想刪除(或POP)都VCC和VCB在同一時間,直接進入VCA。我不想去vcB。我怎麼做?

是否有可能當正在顯示VCC從堆棧自動刪除VCB?

感謝

回答

2

我認爲你可以惹他們作爲一個數組

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers]; 
[viewControllers removeObjectIdenticalTo: removedViewController]; 
navigationController.viewControllers = viewControllers; 
+0

Yesssssssssssssssssssssssssssssssssssssssssssssssssss !!!!!!!!!!!!!!!而已!謝謝!!!!! – SpaceDog

+0

我們知道這是否尊重生命管理週期?如在,將被刪除的意見得到他們的所有卸載回調激活? –

+0

由於您仍在引用實際值並僅創建一個可變數組並刪除單個值,所以一切仍應起作用。但是將其從該陣列中刪除可能會在其上留下保留。我會通過附加到儀器並反覆執行該功能來驗證所有功能是否正常工作。如果你在這個動作上有內存泄漏,那麼我會以這種方式釋放從數組中刪除的項目。除此之外,它應該正常工作。 –

2

你嘗試過:

[self.navigationController popToRootViewControllerAnimated:YES]; 
+0

是的,這會刪除vcC而不是vcB。 – SpaceDog

0

你可以只調用-popToRootViewControllerAnimated:UINavigationController ...

[self.navigationController popToRootViewControllerAnimated:YES];

0

如果A是根,popToRootViewController。

如果沒有,假設你保持對蘋果的未公開的API使用限制,我建議不,你不能從列表中從C

彈出兩個çANS B中的視圖堆疊中的任何直接操縱會導致很多潛在的問題

最好的辦法是從C設置一個全局標誌,彈出它,並在B的viewWillAppear(將出現,非DID出現),您檢查狀態說標誌,如果設定,馬上彈出來A.

視圖B就不會出現,在最壞的情況會引起一個小的,大概imper C和A

+0

謝謝。顯然你可以使用Jason的反應正式破解堆棧。不管怎麼說,還是要謝謝你。 – SpaceDog

2

之間ceptible滯後如果你知道A始終是你把第一個控制器,那麼你應該能夠做到:

[self.navigationController popToRootViewControllerAnimated:YES]

或者,如果有可能對其他控制器A前堆棧,你可以這樣做:

[self.navigationController popToViewController:viewControllerA animated:YES]

References

+0

多麼漂亮,不知何故從未注意到這種方法。 –

+0

當用戶按下後退按鈕時,你會如何處理這種情況?沒有簡單的方法在那裏設置鉤子。 – Akshay