iPad App行为:带有tabbarcontroller和更多标签的navigationcontroller

时间:2012-04-24 18:46:19

标签: iphone ios uinavigationcontroller uitabbarcontroller uistatusbar

对于不耐烦的人:

我希望有一个导航控制器,其根视图控制器是一个tabbarcontroller,类似于iPad应用程序。我正在使用IOS 5和故事板。

倾向于阅读:

在我的故事板中,我在UITabBarController中有6个选项卡,它嵌入在UINavigationController中,在显示3个选项卡后给它一个“更多”按钮。

这样做会在按下更多内容时给出两个导航栏:

double nav bar... what does it mean?!

所以我是TabBarController的子类:

//@implentation MyTabController

- (void)viewDidLoad
{
    self.moreNavigationController.wantsFullScreenLayout = NO;
    self.delegate = self;
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    // hide nav bar if current controller is "More" controller
    self.navigationController.navigationBarHidden = 
       viewController == self.moreNavigationController;
}

太好了,这给了我:

almost there

我的猜测是我需要重新布局视图以考虑状态栏,所以我尝试

[self.view setNeedsLayout:YES];

但我得到一个错误,说UIView不包含setNeedsLayout的选择器所以... 如何获取moreNavigationController.navigationBar来考虑状态栏?

更新
我有第二个相关问题。当我点击“编辑”按钮时,编辑控制器以模态显示。它的导航栏在保险控制器下面显示(在动画之后),并且不会接收到触摸。

2 个答案:

答案 0 :(得分:1)

建议不要将tabBarController推送到NavController,而是为每个tabBar View控制器设置NavigatorController,并将TabBarController设置为主窗口根视图控制器。

如果您希望能够在显示标签栏之前显示屏幕,解决方案是将所有导航控制器推入前一个视图控制器,然后输入您想要显示的控制器(这样所有导航栏都有后退按钮) 。 然后将hidesBottomBarWhenPushed = YES设置为第一个视图控制器,这样就不会显示tabBar

示例代码:

UIViewController *prevc = [[UIViewController alloc] init];
//prevc.hidesBottomBarWhenPushed = YES;

//Do this for every VC that will be a tabBarItem
UIViewController *vc1 = [[UIViewController alloc] init];
UINavigationController *nv1 = [[UINavigationController alloc] initWithRootViewController:prevc];
[nv1 pushViewController:vc1 animated:NO];

//Remember to set the tabBarItem!

UITabBarController *tb = [[UITabBarController alloc] init];
tb.viewControllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil];

我刚刚意识到将hidesBottomBarWhenPushed设置为上一个ViewController将无法正常工作,但如果先显示prevc,然后按下以下的viewController,则不会有问题。但是如果你不想在弹出时隐藏标签栏,请检查:

答案 1 :(得分:0)

我也遇到过类似的问题。在我的应用程序中,导航控制器中还有一个Tabarcontroller。当我尝试以编程方式切换到更多导航控制器中的视图控制器时(例如:[self.tabBarController setSelectedIndex:X];)我的应用程序中出现相同的问题。但是下面的代码解决了我的问题。

    self.tabBarController.moreNavigationController.navigationBarHidden = YES;