假設您在導航控制器視圖堆棧上有一個選項卡視圖控制器。 (爲了論證。)您的選項卡控制器爲其每個選項卡視圖提供了一組視圖控制器。你的標籤控制器的導航控制器顯然是設置爲導航控制器(因爲它的視圖在堆棧上)。風格問題:即使它們不是導航堆棧上的頂級視圖,是否爲所有子視圖控制器設置了您的導航控制器?
但是你會爲每個選項卡視圖設置navigationController以指向導航控制器嗎?它們的視圖實際上並不在導航堆棧上(它們是標籤視圖的子視圖),但它們必須能夠將視圖推送到所述堆棧。這是一個壞主意嗎?我應該這樣做,但使用不同的實例變量?
或者你會保持指針從所有的子視圖到他們的父視圖控制器一直到導航控制器?這似乎笨拙,並不是很好,如果你必須去一個以上的深度(我這樣做)。
(我沒有精確地做到這一點,我有一個複雜的觀點與專用控制器的子視圖,所以這是一個無障礙的比喻。)
我同意第一點,我會爲每個選項卡使用單獨的導航控制器。但是如果你有一個複雜的視圖,其中一半會翻轉(到另一個視圖使用專用視圖控制器)?它顯然屬於相同的導航欄,可能需要將視圖推送到導航控制器上。 至於你的第二點,這聽起來像我應該通過獲得超視圖的超視圖的控制器的導航欄上視圖層次? – zekel 2010-08-10 17:12:40
關於第一點,我也做了一些工作,複雜的視圖翻轉以顯示另一個複雜的視圖。但在這種情況下,我仍然使用相同的視圖控制器來維護它,並且操作父'UIView'的'subviews'數組,而不是試圖通過push/pop視圖控制器操作來控制所有視圖操作。如果您將思路限制爲嚴格的控制器/視圖對,則會限制您的動畫類型,並且無法使用該方法進行翻轉。不是說這是唯一的方式,它是一種爲我工作的模式。 – jbm 2010-08-10 23:33:29
就導航欄而言,這取決於你想要用它做什麼。每個視圖控制器都有它的'navigationItem'和'title',導航控制器使用它的規則來確定在你的視圖控制器被推入並彈出到堆棧上時如何操作這些控制器。如果您正在討論單個視圖控制器,那麼您可以自己操縱'navigationItem'的內容。 – jbm 2010-08-10 23:34:10