2011-02-22 50 views
0

我有一個iPhone/iPad應用程序,通過UINavigationController和UITabViewController管理它的衆多視圖控制器。 UINavigationController處理大部分用戶交互,UITabViewController處理用戶設置/首選項。迷失在視圖 - UIViewControllers之間轉換的最佳方式

我的應用程序委託初始化UINavigationController並推送第一個視圖控制器。設置(UITabViewController)可以通過導航控制器菜單欄上的按鈕訪問;用戶可以通過UITabViewController上的按鈕返回主應用程序(UINavigationController)。

我的問題是:當我顯示UITabViewController時,應該如何處理UINavigationController(及其視圖控制器的堆棧),反之亦然?是否有任何理由在用戶在兩者之間切換時刪除/釋放/重新創建每個父控制器,還是應該將每個父控制器的視圖添加/刪除到我的應用程序窗口?

看來,第一個選項會更加註意內存/資源,但這些好處可能會被處理成本蓋過/初始化的視圖控制器每次-ALLOC重。

謝謝。

回答

0

您不必手動管理導航控制器的堆棧。我會做的是將您的設置視圖控制器作爲模態視圖呈現。您可以在導航控制器級別執行此操作。

假設settingsViewController是您的主視圖控制器的屬性。

self.settingsViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal 
[self.navigationController presentModalViewController:self.settingsViewController animated:YES]; 
0

我假設你的意思是UITabBarController。

如果你的導航視圖會在一個標籤項的標籤視圖展現出來,我會建議讓標籤欄控制器爲您的應用程序(並因此總是出現在應用程序)的根視圖控制器。

如果你的導航視圖是主視圖,用戶只需打開了設置等標籤欄視圖,將返回導航視圖,然後模態呈現標籤欄控制器是正確的方式。

在第一種情況下(在標籤欄控制器導航控制器),你不會照顧添加/刪除或分配/釋放的觀點作爲的UIKit將管理它。

在第二種情況下,您可以在想要顯示它時創建一個標籤欄控制器。 presentModalViewController將保留視圖控制器,因此您可以在發送消息後立即將其釋放。如果你想持有視圖控制器,那麼你在應用程序加載時創建一個,並將其保存在導航控制器中(並且導航控制器將始終保留在內存中)。

相關問題