2012-06-21 50 views
0

設計要求:導航控制器內的標籤欄控制器,如何將新的viewcontroller推送到tabcontroller?

  1. 顯示項目的列表,用戶可以從
  2. 挑挑選具有某個項目之後,帶給用戶一個返回按鈕的新視圖。新視圖應該包含底部沒有出現在第一個屏幕中的選項卡列表
  3. 單擊選項卡中的項目時,將出現一個帶有後退按鈕的新屏幕,並且選項卡仍應在底部可見。
  4. 單擊一個選項卡應使用戶將層次結構備份到#2。不到第一個屏幕。

我曾嘗試以下結構:

,也

  • UINavigationController
  • UIViewControllerUITableView
  • UITabbarController

這兩種情況都很好地工作顯示UITabBar,但是當我在一個選項卡中單擊一個項目,推動新UIViewController然後,底部的標籤消失。我希望這些標籤保留在UITabBarController標籤頁內發生的所有推送UIViewControllers的位置。

一個相關的問題是這樣的一個,但它不推viewcontrollers的處理問題選項卡中: Tab bar controller inside a navigation controller, or sharing a navigation root view

我需要改變rootcontroller到UITabController?任何人都實現了這個?

回答

3

這裏是正確的結構:

UITabBarcontroller (UIWindow's rootViewController) 
->UINavigationController (first tab) 
-->UIViewController 
->UINavigationController (second tab) 
-->UIViewController 
+0

但我不希望在第一個屏幕的選項卡。我的第一個屏幕是項目列表(例如Tweetie中的帳戶)。當點擊一個項目時,我推一個顯示標籤的新控制器。這是主要的問題,因爲它有點「不標準」,但是Tweetie在AppStore中提供了這個功能。 –

+0

這是一樣的。您只需以編程方式創建您的UITabBarController,然後使用rootViewController爲每個導航項初始化UINavigationController。控制器(這是你的實際控制器),並設置標籤欄控制器的'viewControllers'屬性與你創建的導航控制器的陣列... – graver

+1

哦,我不知道我是如何錯過了那一個。感謝您指出!我現在有兩個導航頭,但至少可以工作。我只是拉一些魔術,以顯示正確的:-) –

3

這聽起來像你想改變你的視圖層次的佈局,以滿足您的要求。你應該出示您的視圖控制器這樣:

的UITabBarController - >的UINavigationController - >的UIViewController

在您的應用程序委託,可以實現這個編程使用的東西沿着線:

UIViewController *viewControllerOne = [[[UIViewController alloc] init] autorelease]; 
UINavigationController *navigationControllerOne = [[[UINavigationController alloc] initWithRootViewController:viewControllerOne] autorelease]; 

UIViewController *viewControllerTwo = [[[UIViewController alloc] init] autorelease]; 
UINavigationController *navigationControllerTwo = [[[UINavigationController alloc] initWithRootViewController:viewControllerTwo] autorelease]; 

UITabBarController *tabBarController = [[[UITabBarController alloc] init] autorelease]; 

[tabBarController setViewControllers:[NSArray arrayWithObjects:navigationControllerOne, navigationControllerTwo, nil]]; 

[[self window] setRootViewController:tabBarController] 

我的天堂沒有檢查過上述內容,它只是從記憶中寫下來,但應該按照你的要求做爲例子。

使用這種格式,你可以到導航控制器壓棧任何額外的視圖控制器沒有你的標籤欄消失。

如果你想要把這個視圖層次,而無需在標籤欄控制器作爲你的根視圖控制器,只需按下標籤欄控制器,而不是將其設置爲在應用程序的委託根視圖控制器。

希望有幫助!

+0

謝謝!我更新了這個問題,因爲我看到它有點不清楚。我不想在第一個屏幕上顯示標籤,那麼我可以在tabController和navigationController之間來回切換rootController嗎? –

+0

是的,那是可能的。或者,您可以從原始視圖控制器中推送標籤欄控制器,而不是更改根視圖控制器。 – CaptainRedmuff

相關問題