2008-11-12 67 views
2

我有一個應用程序,每個應用程序都有對應的UINavigationController,它們都放在UITabBarController的內部,在屏幕底部顯示5個選項卡。UITabBarController中的隱藏的UINavigationController

當按下對話框按鈕時,我想要顯示另一個UIViewController(位於UINavigationController內)。

該視圖只能以編程方式加載和卸載;即它不應該出現在標籤欄中。但是,我希望標籤欄始終可見。

如果我將[UINavigationController view]添加到[self window]UITabBar被覆蓋。如果我將它添加到任何其他圖層,則UINavigationController會增加它對狀態欄的補償,使其顯得比預期的更低。

解決方法是將第6個UINavigationController與其他的UITabBar相加,但隱藏其tabBarItem。然後我可以使用tabBar s selectedIndex屬性將其隱藏。

通過UIViewController訪問tabBarItem顯示沒有明顯的方法。


@wisequark,我想你完全誤解了,你幾乎改寫了我的應用程序的體系結構。不過,對於每個視圖,我都有一個單獨的導航控制器,因爲它們是互斥的,沒有「鑽取」的概念。

@Kendall,這是我期望我必須做的 - 讓模態視圖帶有一個隱藏按鈕來恢復正常的界面。但是保持標籤欄始終可見,這將是很好的,所以我只是想知道有沒有人知道一種方式。

回答

3

嗯,這聽起來像你真正想要做的是與標籤欄仍然可見目前模態的視圖。您可以將視圖添加爲標籤欄控制器視圖的子視圖。奇怪的是,標籤欄的視圖不是標籤欄本身,而是包含標籤欄和所選項目視圖的視圖。

或者,也可以嘗試調用presentModalViewController:動畫:與所選選項卡(即[tabBarController.selectedViewController presentModalViewController:動畫:])作爲接收器而不是標籤欄。我似乎記得曾經這樣做過(非常偶然),標籤欄仍然可見。

還有一個想法:因爲每個您的五個視圖控制器是一個UINavigationController,你總是可以pushViewController:動畫:到選定的視圖控制器,然後隱藏後退按鈕。您的視圖將只顯示沒有動畫。但是,當用戶切換到另一個選項卡時,您需要記住將視圖控制器從堆棧彈出。這可能需要更多的工作。

15

聽起來好像你的手上有一團糟。 A UINavigationController是與UITabBarController完全不同的對象。一般來說,你的應用程序應該有一個標籤控制器,其中一個標籤的加載UINavigationController,然後加載它的意見 - 而不是都維護管理不同的意見。指代UIViewController的顯示也是不恰當的,因爲這樣的對象沒有可視化表示。在UINavigationController的情況下,導航控制器對象負責顯示導航欄和表格視圖(在最常見的情況下)以及管理導航層次結構中所有視圖的顯示。它本身在屏幕上沒有相應的表示。同樣,UITabBarController提供了一個標籤欄,並負責加載和卸載附加到標籤按鈕的視圖和/或視圖控制器。如果我們把這位爲圖像,它會是這個樣子 - alt text http://img.skitch.com/20081112-2sqp7q4wafa34te1ga337u4k8.png

2

我能想到的最好的辦法是要麼推動您的視圖模式導航控制器(這將隱藏標籤欄這你不需要),或者讓標籤欄控制器當前選定的視圖控制器(真的是你的導航控制器的標籤),並推動你的新視圖控制器 - 然後彈出該視圖時,另一個選項卡與標籤欄委託。

雖然如果視圖是從模態對話框創建的,但我不明白爲什麼視圖本身不應該也是模態並隱藏標籤,所以我認爲將視圖推送到隨機選項卡似乎更加困難。

相關問題