2011-03-09 26 views
0

假設我已經測試了根級別的導航控制器。如何將根控制器移動到另一個控制器中

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    self.window.rootViewController = self.navController; //iOS4 
} 

現在我想將它移動到標籤控制器(在一個更大的應用程序)內的一個選項卡。我覺得我應該可以做一個相當於上面:

self.rootViewController = self.navController; //pseudocode 

裏面說

- (void)viewDidLoad 

只是刪除的代碼其實什麼是正確的/優雅的方式來進行此事?通常書籍是指控制器的根控制器,我想知道如何訪問它,因爲我可以在窗口中找到它。 (當然,我的理解可能是錯誤的)。

回答

1

修訂的答案:

你的確可以在其他地方的UI根據需要插入您的主要UIViewController的視圖。

訣竅是儘早做到這一點,和/或以正確的方式。 viewDidLoad不是正確的位置 - 在調用該方法時,通常需要使用主UIViewController實現。

有兩個非常好的地方做這種UI的設置:

1)通過接口生成器(筆尖文件)通過在UIViewController實施loadView

2)(務必閱讀Apple docs - - 非常好的信息)。

這是這樣或那樣,不要試圖同時做一個UIViewController!

因此,在您的示例中,您可以使用界面構建器來編輯包含標籤欄控制器的筆尖。拖入一個普通的UIViewController作爲選項卡控制器的子項,然後將UIViewController的'Class'屬性編輯爲MySpecialViewController(即UIViewController的子類)。就是這樣,你的筆尖現在會讓你的視圖控制器被添加到選項卡中的UI中。

要採取方法2),您需要在包含標籤欄控制器UI的UIViewController的loadView方法中設置UITabBarController的viewControllers屬性。

(下面我原來的答覆)

沒有進入蘋果電腦公司提供的視圖控制器的根視圖控制器(S)(如UINavigationController的等)一貫的命名方式。但文檔給你提供有關如何訪問它們的信息;例如UINavigationController有一個名爲viewControllers的屬性,您可以訪問它。

無縫地翻出現有視圖控制器並將它們插入UI中的不同位置並不是一個好主意。如果你順其自然地走下去(例如設備方位改變),你可能會帶來各種各樣的悲傷。這不是Apple想讓你採取的那種方法。

一個更好的方法是在不同的地方有不同的視圖控制器的幾個不同的實例。如果他們需要訪問相同的數據,他們共享相同的數據源。但他們是個別的,不同的實例。

+0

我實際上並沒有拿出一個控制器,而是隨機地將它放在別的地方。我在一個乾淨的項目中測試應用程序的一小部分作爲一個窗口。在我的情況下,功能與其中一個選項卡中的功能相同。爲了更好地理解風險投資公司的工作方式,我這樣做了。讓它在單一視圖中工作,我覺得它應該很容易讓它作爲一個選項卡工作。 – Gazzer 2011-03-09 17:25:05

+0

啊,我明白你的意思,對不起,我在那裏得到了錯誤的結局。我會更新我的答案。 – occulus 2011-03-10 10:04:59

相關問題