使用UITabBarViewController初始化时,iOS NavigationCotroller pushViewController

时间:2013-04-14 09:20:56

标签: ios uinavigationcontroller uitabbarcontroller

我的主视图控制器A有一个UITabbarViewController,它有5个标签。

  • 在viewcontroller A上,我为我的应用设置了[self.navigationController setNavigationBarHidden:YES]

  • 在选项卡2的viewController上,我有一个表视图,我希望当我选择一行表时,我将呈现一个viewController B(同时还有navigationBar和tabbar)

    • 我试过[self.navigationController pushViewCOntroller:B animated:YES],但这不是工作。我认为因为为navigationBar设置了隐藏
    • 我也尝试了[self presentModalViewController:B],但它在viewcontroller B上工作,它显示全屏(navigationBar和tabbar消失)

任何人都可以帮助我吗? 提前致谢

1 个答案:

答案 0 :(得分:1)

怎么样

                         tabBarController
                                    |
                                    |
                                    |-->Item1ViewController
                                    |
                                    |-->NavController->Item2ViewController->push->VCB
                                    |
                                    |-->Item3ViewController
                                    |

确保tabBarController尚未包含在NavigationController中,这会引起混淆。

您可以选择通过设置各自的属性来显示/隐藏Item2ViewController和VCB上的导航栏。

如果使用故事板,您可以在使用菜单项“embed in ...”设置tabBarController后在NavContoller中嵌入Item2ViewController。

如果在代码中你可以做这样的事情:

    UIViewController* vc1 = [[UIViewController alloc] init];
    UIViewController* vc2 = [[UIViewController alloc] init];
    UIViewController* vc3 = [[UIViewController alloc] init];
    UIViewController* vc4 = [[UIViewController alloc] init];
    UIViewController* vc5 = [[UIViewController alloc] init];
    UINavigationController* navC = 
           [[UINavigationController alloc] initWithRootViewController:vc2];
    NSArray* viewControllers  = @[vc1,navC,vc3,vc4,vc5];
    UITabBarController* tabC = [[UITabBarController alloc] init];
    tabC.viewControllers = viewControllers;
    [self presentViewController:tabC animated:YES completion:nil];

        //  don't do this:
    //  [self.view addSubview:tabC.view];

(“呈现”位有争议,它实际上取决于你的app结构的其余部分。)