TabBar隐藏起来,无论我怎么问,都不想回来......

时间:2011-12-16 10:18:23

标签: objective-c ios5 uitabbar segue

我遇到了很多人之前遇到过的问题,但随着新的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带回来?

4 个答案:

答案 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

对我来说工作正常。