hidesBottomBarWhenPushed但弹出时

时间:2011-04-06 16:42:57

标签: iphone cocoa-touch uiviewcontroller uinavigationcontroller

我遇到的问题似乎非常简单。 我的应用程序有一个视图层次结构,包含一个包含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],但它不起作用......)

所以,问题出现了:当我按下第三级的后退按钮并出现第二个视图时,我需要再次隐藏标签栏,但我找不到这样做的方法。

感谢任何帮助

5 个答案:

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

我希望它可以帮到你。