如何将 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;
我已将用户 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;