我有一个 UITabBarController。当我选择第一个选项卡以外的选项卡时,我希望隐藏选项卡栏(我通过 hidesBottomBarWhenPushed 实现)并且导航栏有一个后退按钮(不是普通的,而是默认箭头)(进入第一个选项卡)。我如何实现这一目标?
1 回答
我将在下面回答你的问题,但我不得不说这是一个非常不标准的用户界面,它混合了隐喻。如果你真的想推送到不同的视图控制器,你真的不应该使用标签栏。您可能应该只使用简单的按钮来访问您的辅助视图控制器。如果 Apple 会拒绝像您想象的那样使用标签栏的应用程序,我不会感到惊讶。
无论如何,要回答您的问题,您不想尝试向辅助视图添加“后退”按钮,而只想正确实现导航控制器。然后,当您推送到辅助视图时,您会自动获得后退按钮。而且您也不必担心与隐藏标签栏相关的愚蠢,因为当您推送到另一个视图时,它也会被推开。
所以,考虑这个例子,你有一个带有按钮“一”、“二”和“三”的标签栏。但是,不是一个正确的标签栏控制器配置,你会有这样的东西,其中“一个”在导航控制器上,并且上面有一个简单的标签栏用户界面控件,如果你碰巧点击第二个或第三个选项卡,它只会推送到相应的视图。因此,从逻辑上讲,它可能看起来像这样(即使您不使用情节提要,这也可能有助于可视化潜在的配置):
因此,在主视图控制器(“One”)上,您将添加一个标签栏,其中包含IBOutlet
:
@property (weak, nonatomic) IBOutlet UITabBar *tabBar;
然后我会在中配置该标签栏viewDidLoad
,例如:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tabBar.delegate = self;
self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:0];
}
显然,视图控制器本身需要是 a UITabBarDelegate
,并且您需要 adidSelectItem
可以执行 push segue 或使用您的navigationController
to pushViewController
。而且,很明显,您将希望更改对标签栏按钮上实际标签的引用@"Two"
和@"Three"
实际标签,但希望这能给您带来想法:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
if ([item.title isEqualToString:@"Two"])
{
// put code for pushing to second view controller here
}
if ([item.title isEqualToString:@"Three"])
{
// put code for pushing to third view controller here
}
}
我还希望主视图控制器确保在您弹出后重新出现时将所选项目设置回第一个项目:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:0];
}
无论如何,如果你这样做,标签栏就不会隐藏(因为它不再是控制器,而只是第一个标签上的用户界面元素)。这可能是实现所需用户界面的最简单方法。