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