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带回来?
这是一个完美的答案,为未来的读者提供一个清晰可读的解决方案,并明确地阐述一些相关的问题.
该问题的解决方案是以下代码>
-(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的解决方案,这是我读完关于赏金和接受的规则后我能来的最接近的)谁帮我解决了这个问题,+一个小评论为什么,在他们尊重的线程中.
我想你需要设置
segue.destinationViewController.hidesBottomBarWhenPushed = YES;
Run Code Online (Sandbox Code Playgroud)
而不是self.hides ....