1

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

  1. 喂养
  2. 地图
  3. 新的
  4. 相机
  5. 搜索

提要、地图、摄像头和搜索将各自拉出各自的 VC,而新的应该更像是一个功能按钮。当新的标签项被按下时,应该显示地图视图,并且地图应该开始记录用户的位置。我正在尝试使用 aUITabBarController来管理这些视图,但我似乎无法弄清楚如何使用“新建”选项卡实现我想要的功能。似乎我需要为“新”记录和停止功能实现一个单独的视图控制器,但这似乎不正确。

记录/停止的功能应该类似于 snapchat 的红色大按钮,按下它会拍照。

4

3 回答 3

3

虽然我同意Scott的评论,即这是一个糟糕的 UX,但如果您在技术上想要这样做,您可以进行子类化UITabBarController,并且viewDidLoad可以将UIButton子视图添加到选项卡栏控制器的tabBar

[self.tabBar addSubview:yourCustomButton];

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

idevrecipes为例。

于 2012-12-26T21:24:51.617 回答
1

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

于 2012-12-26T21:16:54.853 回答
0

我打算挖掘 shawnwall 指出的 idevrecipes 示例,但还有另一个可能的答案,假设您希望 New 按钮与标准 UITabBarButton 外观相匹配。我同意它可能不是最好的 UI,但它是可行的。

对于初学者,您将为新项目创建一个虚拟视图控制器。我并不是说您应该复制 Maps 控制器或任何东西,我只是说创建一个空视图控制器并将其(或它的位置)存储在一个属性中。假设您正在创建标签栏application:didFinishLaunchingWithOptions:,它看起来像这样。

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

将该视图控制器拖放到选项卡栏控制器viewControllers属性中的适当位置。

保存对 Maps 控制器的引用,方法与为虚拟 New 控制器保存引用的方式相同。

如果您还没有这样做,请将 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 路线并使按钮在视觉上与众不同。但是,如果您与标签栏项目外观结婚,我相信这就是您完成它的方式。

于 2012-12-26T22:40:11.287 回答