自定义TabBarController功能

时间:2012-12-26 21:13:54

标签: ios ios6 uitabbarcontroller custom-controls

我正在尝试使用以下选项创建自定义标签栏控制器:

  1. Feed
  2. 地图
  3. 相机
  4. 搜索
  5. Feed,地图,相机和搜索都将拉出各自的VC,而new应该更像是一个功能按钮。按下新选项卡项时,应显示地图视图,并且地图应开始记录用户的位置。我正在尝试使用UITabBarController来管理这些视图,但我似乎无法弄清楚如何使用“新建”选项卡实现我想要的功能。好像我需要为“新”记录实现一个单独的视图控制器并停止功能,但这似乎不对。

    记录/停止的功能应该类似于按下它时拍摄照片的Snapchat的大红色按钮。

3 个答案:

答案 0 :(得分:3)

虽然我同意Scott的评论,这是一个糟糕的用户体验,如果你在技术上想要这样做,你可以继承UITabBarController,在viewDidLoad你可以添加一个{ {1}}子视图到标签栏控制器的UIButton

tabBar

因此,这个按钮可以拥有它自己的动作和选择器来做任何你想做的事情。

idevrecipes为例说明一下。

答案 1 :(得分:1)

我认为你必须自己实现容器视图控制器。我认为你不能用UITabBarController做到这一点。

答案 2 :(得分: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的委托设置为您的app委托。您可能需要声明您的应用委托符合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;
}

用户交互的外观有点奇怪 - 用户选中中间项(新),但左边的项(Map)被选中。如果你想要“标签栏触发行为”动作,我会去idevrecipes路线并使按钮在视觉上与众不同。但是,如果你嫁给标签栏项目,我相信这就是你完成它的方式。