以编程方式推送UINavigationController后顶部栏不可见

时间:2015-01-23 01:40:52

标签: ios objective-c iphone uinavigationcontroller uinavigationbar

在AppDelegate中我检查是否存在用户,如果我通过使用此代码推送NavigationController而“跳过”两个ViewControllers:

if(currentUser){

    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"Test"];

    self.window.rootViewController = viewController;
    viewController.navigationController.navigationBarHidden = NO; // Tried this nothing happened.
    [self.window makeKeyAndVisible];

}
else{
    [PFUser enableAutomaticUser];
    [[PFUser currentUser] incrementKey:@"RunCount"];
    [[PFUser currentUser] saveInBackground];
    [[PFUser currentUser] fetch];


    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UINavigationController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"firstView"];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

}

因此,true语句会跳过两个ViewControllers并推送UINavigationController。但当它以这种方式显示时,没有顶栏。

但是如果没有用户,则会通过segues以“正常”方式进入UINavigationController,然后条形图可见。

我该如何解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:2)

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
 bundle:nil];
    UIViewController *viewController = [storyboard 
instantiateViewControllerWithIdentifier:@"Test"];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.window.rootViewController = nav;

答案 1 :(得分:0)

"所以真正的语句会跳过两个ViewControllers并推送UINavigationController。"不,它没有。首先,你没有推动任何东西,你要设置窗口的根视图控制器。其次,您还没有创建任何导航控制器,您只创建了viewController。

如果viewController在故事板中有一个导航控制器,那么你应该实例化导航控制器(它将反过来实例化viewController),并使其成为窗口的根视图控制器。

答案 2 :(得分:0)

我认为你应该将UINavigationController设置为rootviewController,会有一个导航栏。所以你也可以将firstView设置为rootViewController,但是设置viewcontrollers属性以放置在viewcontrollers之前清除的Test viewcontroller。