2013-03-02 16 views
8

情況:兩個UITabBarController,每個都有自己的選項卡,但中的最後一個選項卡都是相同的,所以想要一個 UIViewController顯示內容。兩個UITabBarControllers共享一個ViewController(作爲標籤內容)?

運行時問題:共享項目只出現在一個顯示的標籤集。

問題:任何人都知道一種方法來使這項工作?

鏈接到故事板設置的外部圖形:(對不起,沒有足夠的信譽來這裏發表圖片!) Storyboard graphic

Xcode工程與故事板: XCode Project

每個選項卡的內容項有它自己的UIViewController類。它們不包含除了使後退按鈕起作用的行之外的代碼。實際情況是一個iPad應用程序,其中的選項卡控制器顯示在彈出窗口中;彈出窗口是「屬性編輯器」,不同對象具有不同的屬性,但都共享一組共同的屬性。 。因此,一個「獨特」道具選項卡,一個共享選項卡內容爲「共同」道具的所有對象都有。)

我發現了一些方法來獲得我想要的效果,但如果此故事板工作這將是一個更容易的解決方案。

- 其他信息,有些無關的問題 - 我使用

替代的解決方案:TabBarControllers只能鏈接到一個VC作爲標籤內容。當VC加載時,我使用代碼(a)通過標識符從storyboard實例化共享VC,(b)通過[tabController setViewControllers:list animated:NO]將新的VC對象添加到TabBarController。

(另一種可能的解決方案,我想就更少了:。不使用TabBarController,並呈現內容VC與我自己的「標籤」圖形捲入其中,每一次放映「自己」作爲選擇的育)

所以我有一個工作解決方案,我只是好奇,爲什麼這不起作用(只是在iOS API的一個已知的東西,或一些神奇的屬性設置,可能會使其功能?)

+0

注意類似的問題與不同的重點(奇怪的東西去那裏與表和重用視圖等...):http://stackoverflow.com/questions/8620619/uitabbarcontroller-storyboard-connecting-viewcontroller- thats-already-connecte?rq = 1 – 2013-03-02 17:28:28

+0

我不確定你想要完成什麼。在代碼中添加第二個選項卡的解決方案可以通過複製共享控制器並將一個實例掛接到每個選項卡欄控制器來在故事板中完成。在任何一種情況下,你都會得到兩個不同的「共享」控制器實例。 – rdelmar 2013-03-03 01:27:39

+0

當我決定需要使用不同的背景顏色和按鈕佈局時,我試圖完成的任務不是編輯「一個」故事板場景的多個副本中的UI佈局。在這個例子中,只有兩個副本。在我的實際應用中,可能會有10多個,因此希望分享。正試圖避免將用戶界面外化爲.XIB文件並從那裏加載,這是故事板打算離開的地方。 – 2013-03-03 21:11:31

回答

0

你不能把相同查看控制器實例到兩個選項卡控制器問題是一個視圖(UIView)實例只能有一個父視圖(superview)。當您嘗試將視圖控制器添加到第二個選項卡時,視圖控制器的視圖將從其第一個父級(第一個選項卡)中移除,然後添加到第二個選項卡中。

+0

我並不反對,但我不確定這是問題的根源。整個TabBarController按鈕消失,而不僅僅是查看。第二個ViewController永遠不會在第二個TabBarController的ViewControllers數組中設置。雖然確實[view addSubview:sub]導致子視圖從任何現有的父視圖中被移除爲副作用,但問題似乎比這更復雜。我想要得到確認,蘋果的Storyboard實現不能自動實例化SharedViewController的兩個實例(創建兩個視圖對象)。 – 2013-03-02 18:06:39

+0

另外:一次只顯示一個TabBarController,那麼爲什麼每個都不能充分利用SharedViewController的一個實例呢?我同意在兩個地方同時存在問題,但這不是這種情況,除非API在內存中爲故事板提供完整的ViewController設置時,不顯示。首先顯示哪個TabBarController似乎並不重要,所以它不像當你顯示它「獲得對視圖的控制」,因此第二個演示文稿稍後從其他人的層次結構中抓取視圖。在第二個TBController中,Tab從未顯示。 – 2013-03-02 18:14:00

0

我偶然發現了你的線程,而今天遇到同樣的問題...... 解決方法是在故事板中複製視圖控制器並將複製附加到其他標籤欄控制器。 我只是做了它,它的工作原理... 我認爲'rdelmar'是正確的...複製它並設置它..!

+3

因此,每次您想進行佈局更改時,都會創建更新故事板場景的一打副本的噩夢。複製事物並在多個地方使用完全相同但不同的副本只會讓我的程序員想要拋出一點點...... :-) – 2014-01-13 01:05:28

0

今天我遇到了同樣的問題。我設法想出了一個解決方法,似乎可以做到這一點。關鍵是在Tabbar和要重用的控制器之間添加一個分隔層。從每個標籤欄中,我創建了一個與具有容器視圖的獨特UIViewController的關係。然後,您可以從容器中將「嵌入」segue,然後將其重新用作選項卡視圖。它不像直接連接那麼幹淨(不知道爲什麼不支持),因爲你必須爲每個重用情況創建一個控制器類。它仍然是一個更好的解決方案,而不是必須複製實際標籤視圖(以及連接到它的任何其他視圖)的每一次使用的噩夢。

希望這會有所幫助。讓我知道是否有人需要更多細節。

+0

我明顯地轉向(並且重複執行),但我認爲您的解決方案會工作......假設您可以爲內容視圖控制器創建多個「入站」ebed隊列。你是對的,它不那麼直接,並且創建一個痛苦,因爲tab控制器不能直接引用它的內容(這將是容器視圖控制器)。但顯然沒有人發佈更好的解決方案...... :-) – 2015-02-20 22:04:17