我正在尝试使用以下选项创建自定义标签栏控制器:
Feed,地图,相机和搜索都将拉出各自的VC,而new应该更像是一个功能按钮。按下新选项卡项时,应显示地图视图,并且地图应开始记录用户的位置。我正在尝试使用UITabBarController
来管理这些视图,但我似乎无法弄清楚如何使用“新建”选项卡实现我想要的功能。好像我需要为“新”记录实现一个单独的视图控制器并停止功能,但这似乎不对。
记录/停止的功能应该类似于按下它时拍摄照片的Snapchat的大红色按钮。
答案 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路线并使按钮在视觉上与众不同。但是,如果你嫁给标签栏项目,我相信这就是你完成它的方式。