2010-05-13 27 views
0

我是iphone開發新手。iPhone:TabBarController作爲第二級導航控制器

我讀過關於在窗口上實現標籤欄控制器的教程(例如作爲應用程序的主控制器)。但是,我怎樣才能創建一個標籤欄控制器作爲一個'獨立的'UIViewController,可以通過導航欄控制器調用?

基本上,我的導航欄控制器有一個UIViewControllers數組,它顯示在表中,然後在用戶選擇一個項目時加載相應的視圖/控制器。

現在我希望這些加載的視圖/控制器之一是一個標籤欄控制器。我怎樣才能做到這一點?

我不知道如何在應用程序委託中沒有插座/實例的情況下自行創建標籤欄控制器。

希望有道理。謝謝。

+0

似乎記得,這是基於在UI準則 – willcodejavaforfood 2010-05-13 22:37:08

回答

3

儘管以前的答案是正確的,我只是想指出的是,蘋果將不會滿意這樣的:

你永遠不希望在標籤欄控制器推到的導航堆棧導航控制器。這樣做會造成一種不尋常的情況,只有在特定的視圖控制器位於導航堆棧的頂部時,標籤欄纔會出現。標籤欄被設計爲持久的,因此這種瞬態方法可能會讓用戶感到困惑。

報價來自:Apple View Controller Programming Guide

讀人機界面指南,您的應用程序可能會被拒絕「破接口規則」。更重要的是,你還必須手動處理所有的視頻出現/消失等。我很確定還有另一種設計界面的方式。

問候, 保羅

0

您有兩種選擇。

首先。創建UITabBarController(一般alloc-init的東西)並將其推送到UINavigationController。

二。您可以創建自定義UIViewController並將UITabBar放置在那裏。之後,您可以自定義它並將該自定義UIViewController推送到導航控制器。代碼將如下所示:

UITabBar *tabBar = [[UITabBar alloc] initWithFrame: 
    CGRectMake(0, self.view.frame.size.height - 49, 320, 49)]; 
tabBar.autoresizingMask = 
    UIViewAutoresizingFlexibleTopMargin | 
    UIViewAutoresizingFlexibleWidth; 
[self.view addSubview:tabBar]; 

例如,您可以在UIViewController的viewDidLoad方法中使用類似的代碼。 要處理選項卡中的變化時,你就必須實現UITabBarDelegate協議,併爲其分配(例如到的UIViewController本身):

tabBar.delegate = self; 

之後,你就必須實現

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 

方法會幫助你捕捉事件。

+0

感謝皺起了眉頭。那麼在IB中沒有辦法使用tabbarcontroller?我想要一個tabbarcontroller的所有功能,但我希望能夠在我自己的視圖中而不是在窗口上顯示它。 – nebs 2010-05-14 14:28:10