2012-12-26 149 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路线,并使按钮视觉上不同。如果你已经结婚了标签栏项目看,但是,我相信这是你如何完成它。