我遇到了很多人之前遇到过的问题,但随着新的iOS版本的出现和API的变化,它的解决方案会随着时间的推移发生变化。以前的解决方案都不适用于我目前的设置 - XCode 4.2.1,iPhone模拟器5.0或真正的iPhone 5.0,应用程序的目标是iOS5,使用ARC和Storyboard。
我有一个经典的Tabbed应用程序-ie UITabBarController,其中4个标签...忽略2到4标签.. 第一个选项卡托管UINavigationController,其rootviewcontroller是UITableViewController。现在我将1个CustomUIViewController推入堆栈。
整个设置在Storyboard中进行了视觉设计,推送由segue完成。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
self.hidesBottomBarWhenPushed = YES;
}
这有效地隐藏了tabbar,就像iPod应用程序在iPhone中一样。
但是当我从堆栈弹出CustomUIViewController时,TabBar不会回来。
self.hidesBottomBarWhenPushed = NO;
到所有可能的和不可能的地方,但没有运气。
我如何将我的TabBar带回来?
答案 0 :(得分:7)
这是一个完美的答案,为未来的读者提供一个清晰易读的解决方案,并明确地阐述一些相关问题。
问题的解决方案是以下代码>
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}
问题/混淆在于,在prepareForSegue:方法中,可以在源视图控制器(我们目前看到的那个)或目标视图控制器上设置属性“hidesBottomBarWhenPushed”(正被推入堆栈的那个)。通过这种方式设置,你可以解决问题的前半部分,即。你的TabBar被隐藏了。这就是我以前的代码中的“隐藏”部分工作的原因,我在源视图控制器上设置了属性。在我的代码中
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
self.hidesBottomBarWhenPushed = YES;
}
这里,“self”指向源视图控制器,而不是destionation视图控制器。 所以我们必须将它设置为目标视图控制器......
最后一个问题..这个带点符号的代码不起作用>
segue.destinationViewController.setHidesBottomBarWhenPushed = YES;
你像这样调用setter方法
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
该解决方案完全符合Apple规范,其中指出“在视图控制器(将hide属性设置为YES)从堆栈中弹出之前,底部栏保持隐藏状态。”< / p>
最后,不要忘记将hide属性的设置缩小到特定的segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
if ([segue.identifier isEqualToString:@"SegueIdentifier"])
{
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}
}
我正在为两个用户分配奖励(赏金去Ash Furrow,接受Eric Lars0n的解决方案,这是我读完关于赏金和接受的规则后我能来的最接近的)谁帮我解决了这个问题,+一个小的在他们尊重的主题中评论为什么。
答案 1 :(得分:5)
我认为你需要设置
segue.destinationViewController.hidesBottomBarWhenPushed = YES;
而不是self.hides ....
答案 2 :(得分:4)
根据Apple,“在视图控制器从堆栈弹出之前,底部栏保持隐藏状态。”除非您弹出到导航层次结构中较高的视图控制器,否则无法“取消隐藏”底栏。
您必须提出一些不涉及hidesBottomBarWhenPushed属性的其他解决方法。有关如何在another SO question中完成此操作的详细说明。
答案 3 :(得分:1)
只需将[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
放入prepareForSegue
。
对我来说工作正常。