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

Ear*_*rey 3 objective-c uitabbar ios5 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;
}
Run Code Online (Sandbox Code Playgroud)

这有效地隐藏了tabbar,就像iPod应用程序在iPhone中一样.

但是当我从堆栈弹出CustomUIViewController时,TabBar不会回来.我正在把

self.hidesBottomBarWhenPushed = NO;
Run Code Online (Sandbox Code Playgroud)

到所有可能的和不可能的地方,但没有运气.

我如何将我的TabBar带回来?

Ear*_*rey 7

这是一个完美的答案,为未来的读者提供一个清晰可读的解决方案,并明确地阐述一些相关的问题.


该问题的解决方案是以下代码>

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}
Run Code Online (Sandbox Code Playgroud)

问题/混淆在于,在prepareForSegue:方法中,可以在源视图控制器(我们目前看到的那个)或目标视图控制器(在目标视图控制器上)设置属性"hidesBottomBarWhenPushed"(被推入堆栈).通过这种方式设置,你可以解决问题的前半部分,即.你的TabBar被隐藏了.这就是我以前的代码中的"隐藏"部分工作的原因,我在源视图控制器上设置了属性.在我的代码中

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.hidesBottomBarWhenPushed = YES;
}
Run Code Online (Sandbox Code Playgroud)

这里,"self"指向源视图控制器,而不是destionation视图控制器.所以我们必须将它设置为目标视图控制器...

最后一个问题..这个带点符号的代码不起作用>

segue.destinationViewController.setHidesBottomBarWhenPushed = YES;
Run Code Online (Sandbox Code Playgroud)

你像这样调用setter方法

[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
Run Code Online (Sandbox Code Playgroud)

该解决方案完全符合Apple规范,该规范声明"底部栏保持隐藏状态,直到视图控制器(将hide属性设置为YES)从堆栈中弹出."

最后,不要忘记将hide属性的设置缩小到特定的segue

-(void)prepareForSegue:(UIStoryboardSegue *)segue 
                sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SegueIdentifier"]) 
    {
        [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

我分两个用户的奖励(赏金去Ash Furrow,接受Eric Lars0n的解决方案,这是我读完关于赏金和接受的规则后我能来的最接近的)谁帮我解决了这个问题,+一个小评论为什么,在他们尊重的线程中.


agi*_*ion 5

我想你需要设置

segue.destinationViewController.hidesBottomBarWhenPushed = YES;
Run Code Online (Sandbox Code Playgroud)

而不是self.hides ....

  • 解决方案是正确的,但我们必须调用setter方法,因为点符号不起作用.[segue.destinationViewController setHidesBottomBarWhenPushed:YES]; (4认同)