我遇到的问题似乎非常简单。 我的应用程序有一个视图层次结构,包含一个包含UINavigationControllers的UITabBarController。当我从根导航到第二级时 我将hidesBottomBarWhenPushed设置为true,以便隐藏标签栏
在我的firstLevelController上:
[secondLevelController setHidesBottomBarWhenPushed:YES];
[self.navigationController pushViewController:secondLevelController animated:YES];
在我推到第三级之后,我再次通过在secondLevelController中执行标签栏:
[self setHidesBottomBarWhenPushed:NO];
[thirdLevelController setHidesBottomBarWhenPushed:NO];
[self.navigationController pushViewController:thirdLevelController animated:YES];
(我知道,我也不喜欢[self setHidesBottomBarWhenPushed:NO]
,但它不起作用......)
所以,问题出现了:当我按下第三级的后退按钮并出现第二个视图时,我需要再次隐藏标签栏,但我找不到这样做的方法。
感谢任何帮助
答案 0 :(得分:12)
这对我有用。
[self setHidesBottomBarWhenPushed:NO];
[thirdLevelController setHidesBottomBarWhenPushed:NO];
[self.navigationController pushViewController:thirdLevelController animated:YES];
[self setHidesBottomBarWhenPushed:YES];
第三级控制器显示标签栏,第二级控制器在弹出第三级控制器时不显示标签栏。
答案 1 :(得分:5)
在你的secondViewController上,执行:
- (BOOL) hidesBottomBarWhenPushed {
return ([self.navigationController.viewControllers lastObject] == self);
}
这样,当您在secondViewController上时,tabbar将始终被隐藏,并且它将出现在其他视图控制器上
答案 2 :(得分:0)
您可以保存bool值以了解您是否来自popViewController 在viewDidAppear中,您可以检测到它再次隐藏您的标签栏。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(backFromThirdView)
[self setHidesBottomBarWhenPushed:YES];
else
[self setHidesBottomBarWhenPushed:YES];
}
答案 3 :(得分:0)
我实际上遇到了同样的问题。我总是试图在选择行时隐藏标签栏并在返回列表后禁用隐藏(导航控制器内的tableview),以便用户可以再次选择菜单。我将tabbarcontroller设置为隐藏在方法
中-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
但是当我在这个方法中隐藏它时,Tabbar仍然隐藏在再次返回我的列表时。现在我将Tabbarcontroller隐藏在特定viewcontroller的init方法中,也许这适用于其他人:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
[self setHidesBottomBarWhenPushed:YES];
return self;
}
现在,当我选择一个列表项并且将显示此viewcontroller时,隐藏了tabbar,返回列表后它再次出现。
答案 4 :(得分:-1)
你可以试试这个
您在第二级控制器中声明
static BOOL bottomBarShouldHide = YES;
在viewDidLoad中,
if (bottomBarShouldHide) {
[secondLevelController setHidesBottomBarWhenPushed:YES];
bottomBarShouldHide = NO;
}
else {
[secondLevelController setHidesBottomBarWhenPushed:NO];
bottomBarShouldHide = YES;
}
我希望它可以帮到你。