2010-05-07 49 views
2

任何人都可以提出一篇文章或者一個例子,說明如何在Facebook,IMDB和BrightKite應用程序中看到如何使用UINavigationController創建「無限鑽取」?用UINavigationController「無限鑽取」

+0

你能更具體地說明你喜歡Facebook,IMDB和BrightKite嗎?我在IMDB網站上,並沒有看到你指的是什麼。 – 2010-05-07 16:49:13

+0

這些iPhone應用程序中的每個應用程序都至少有一個導航控制器,可讓您通過內容無限地向下瀏覽。例如:在IMDB中,您可以搜索演員,打開他們的視圖,打開他們的電影,然後打開不同的演員,然後打開不同的電影等等。該應用顯然會以某種方式跟蹤歷史記錄,並自動彈出超出觀看範圍某個點......否則會超出監視器的內存限制。 – 2010-05-07 16:54:08

回答

-1

從來沒有這樣做......我會通過保持一個包含前一個視圖內容的輕量級對象(可能只是一個URL?)來處理這個問題。而不是僅僅將一個新的UIViewController推送到UINavigationController,您將彈出當前的一個,而不使用動畫,然後推送新的視圖。不過,我不認爲這會妥善處理好動畫。

想到的另一種方法是操縱UINavigationController的viewControllers數組。推入新視圖後,只需從數組中刪除前一視圖。這樣UINavigationController堆棧將只有1或2個元素深。處理後退按鈕會創建正確的視圖,將其插入到viewControllers數組中,然後彈出當前視圖。您的狀態將由輕量級對象堆棧管理,而不是重量級視圖控制器。

-Dan

+0

我目前正在研究使用Three20的TTNavigator作爲解決方案,因爲它似乎支持此功能...雖然文檔很糟糕,所以我還不確定。 – 2010-05-07 22:24:09

4

UINavigationController被設計成可以使用這種方式。如果內存成爲問題,那麼導航控制器將釋放隱藏的視圖,並在需要時間導航回棧中時重新加載它們。由於這個原因,Apple建議您從NIB加載您的UIView

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html#//apple_ref/doc/uid/TP40007457-CH103-SW28

向下滾動到第4項,「配置您的根視圖控制器的看法。」

+0

kubi,謝謝你的提示。你試過這個嗎?你可以把日誌放在viewDidUnload中(或者不叫這個?)。 -dan – 2010-05-07 20:28:27

+0

根據我的實驗,這是不正確的。 UINavigationController似乎不會自動從堆棧中刪除任何視圖,除非您正在導航回去。 – 2010-05-07 22:23:01

+0

@丹尼爾實際上沒有,但我也沒有這種方式使用NavControllers時的內存問題,所以我認爲一切都像描述的文件一樣工作。請讓我現在如果你發現不同。 – kubi 2010-05-08 04:05:10