2012-12-26 236 views
1

我試圖創建一個自定義標籤欄控制器,具有以下選項:自定義TabBarController功能

  1. 飼料
  2. 地圖
  3. 相機
  4. 搜索

飼料,地圖,相機,和搜索將分別拉起他們的個人VC的,而新的應該是更多的功能按鈕。當按下新的標籤項目時,應該顯示地圖視圖,地圖應該開始記錄用戶的位置。我試圖用一個UITabBarController來管理這些看法,但我似乎無法弄清楚如何實施,我會用「新建」選項卡一樣的功能。看起來好像我需要爲「新」記錄實現一個單獨的視圖控制器並停止功能,但這看起來不正確。

錄製/停止的功能應該是類似snapchat的大紅色按鈕,當你按下它是需要的圖片。

+2

用戶轉到地圖選項卡並添加一個「新」按鈕對用戶來說更直觀嗎?至少對我來說是這樣。 Apple不建議跳轉到代表用戶的選項卡上。 –

+0

該應用程序背後的想法是用於記錄和共享用戶周圍的「風景」路線和圖片。我一直在使用POP(紙上原型,應用程序商店中的免費應用程序)將線框和原型放在一起來測試用戶體驗,並且讓標籤欄中間的按鈕在開始記錄路線時感覺更自然在Feed或地圖上具有「新建」的NavBar項目。 – HighFlyingFantasy

+0

我明白你的意思了。但是,有兩個不同的地圖可能會讓用戶感到困惑,特別是如果他們幾乎完成同樣的事情。我想我會把地圖標籤放在中間位置,並創建一個大按鈕作爲地圖疊加層。我也有一個基於地圖的應用程序,有多個選項卡和多個地圖,但最終決定創建一個地圖選項卡,用戶可以在其上執行任何所需的任何操作,從而更容易。如果你仍然認爲這是要走的路,那麼你可以考慮視圖控制器遏制(iOS 6的一個新功能)。 –

回答

3

雖然我Scott的評論說,這是一個壞UX同意,如果在技術上要做到這一點,你可以繼承UITabBarControllerviewDidLoad你可以一個UIButton子視圖添加到標籤欄控制器的tabBar

[self.tabBar addSubview:yourCustomButton]; 

因此,這個按鈕可以有它自己的動作和選擇器來做任何你想做的事情。

查看idevrecipes爲例。

1

我認爲你必須自己實現容器視圖控制器。我認爲你不能用UITabBarController來做到這一點。

0

我打算挖掘shawnwall指出的idevrecipes示例,但還有另一個可能的答案,假設您希望New按鈕匹配標準UITabBarButton外觀。我同意它可能不是最好的用戶界面,但它是可行的。

對於初學者,您可以爲New項目創建一個虛擬視圖控制器。我不是說你應該複製地圖控制器或任何東西,我只是說創建一個空的視圖控制器和存儲到它(或它的位置)的一個屬性。假設你在application:didFinishLaunchingWithOptions:創建標籤欄,它會是這個樣子。

self.newViewController = [[UIViewController alloc] init]; 
self.newViewController.title = NSLocalizedString(@"New", nil); 
self.newViewController.image = [UIImage imageNamed:"new.png"]; 

掉落,在在標籤欄控制器的viewControllers屬性相應的位置查看控制器。

保存對地圖控制器的引用,與保存虛擬新控制器的方式相同。

如果您還沒有完成,請將您的tabBarController的委託設置爲您的應用程序委託。您可能需要聲明的是應用程序委託符合UITabBarControllerDelegate

UITabBarDelegate爲您提供了一些跟蹤標籤欄更改的掛鉤。 tabBarController:shouldSelectViewController:看起來是爲我們勾在您需要的行爲的適當位置。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    if ([viewController isEqual:self.newViewController]) { 
     self.tabBarController.selectedViewController = self.mapViewController; 
     // Whatever logic you need to start the recording 
     return NO; 
    } 

    return YES; 
} 

用戶交互的外觀有點奇怪 - 用戶選中中間項目(新建),但選中了左側的項目(地圖)。如果你想要「標籤欄觸發行爲」行爲,我會去idevrecipes路線,並使按鈕視覺上不同。如果你已經結婚了標籤欄項目看,但是,我相信這是你如何完成它。