如何将 UINavigation 添加到自定义 RootViewController

How to add UINavigation to a custom RootViewController

我已将用户 ID 存储在 NSUserDefault 中。我的应用程序在 UINavigationController 下意味着所有 ViewController 都连接到 UINavigationController。现在,如果用户未登录,它应该显示第一个屏幕,即登录或注册。但是当用户登录时,应用程序应该以 root 身份显示主屏幕。这是我在 AppDelegate.m:

中所做的
    if([[NSUserDefaults standardUserDefaults]objectForKey:USERID] == nil)
        {
            NSLog(@"User is not logged in");
// default scenario will run i.e. login
        }
        else
        {
            NSLog(@"User ID: %@",[[NSUserDefaults standardUserDefaults]objectForKey:USERID]);
            HomeViewController *home = (HomeViewController *)[mainStoryboard
                                                                         instantiateViewControllerWithIdentifier: @"HomeViewController"];

            [self.window setRootViewController:home];
        }


所以当它显示 home 的屏幕时,上面没有导航栏。那我应该怎么办呢?

HomeViewController *home = (HomeViewController *)[mainStoryboard
                                                                     instantiateViewControllerWithIdentifier: @"HomeViewController"];     
UINavigationController *homeNavViewCtrl  = [[ UINavigationController alloc ] initWithRootViewController:home ];

[self.window setRootViewController:homeNavViewCtrl];

您将 HomeViewController 直接设置为 rootViewController,因此它没有嵌入导航控制器(导航控制器是提供导航栏的东西,所以这就是您看不到的原因).

要使用导航控制器,请在故事板中将 HomeViewController 嵌入到 UINavigationController 中(编辑器 > 嵌入 > 导航控制器),然后给出导航控制器标识符(例如 "HomeNavigationController")。然后,在您的代码中:

UINavigationController *navController = (UINavigationController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"HomeNavigationController"];
[self.window setRootViewController:navController];

或者,您可以通过编程方式将 HomeViewController 嵌入到导航控制器中:

HomeViewController *homeVC = (HomeViewContller *)[mainStoryboard instantiateViewControllerWithIdentifier:@"HomeViewController"]
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: homeVC]
[self.window setRootViewController:navController];

试试这个:

 LoginViewController *loginController=[[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"loginController"]; //or the homeController
UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:loginController];
self.window.rootViewController=navController;