我有这样的应用
导航控制器 - >登录控制器 - >主视图控制器 - >其他的东西
我想尝试登录applicationdidfinishloadingwithoptions,如果成功则加载主视图控制器,否则加载登录视图控制器。我的问题是我希望导航堆栈无论如何都保持完整,这样如果我想退出,我就可以弹回我的登录视图控制器。
现在我尝试在成功登录时实例化主视图控制器,但在注销和其他导航时,它抱怨我没有嵌入导航控制器。
这样做的正确方法是什么?
答案 0 :(得分:1)
如果您正在使用故事板,那么首先为登录创建UIViewController
并为其提供故事板ID,然后创建您的mainViewController并将其嵌入UINavigationController
并将故事板ID提供给{{1} }。
之后在AppDelegate.m的UINavigationController
加载基于用户的相应VC已登录或不登录。
applicationdidfinishloadingwithoptions
所以你的堆栈会变成这样的
// Check if user is logged in
if ([[NSUserDefaults standardUserDefaults] stringForKey:@"loggedIn"] == NULL || [[[NSUserDefaults standardUserDefaults] stringForKey:@"loggedIn"] isEqualToString:@"false"]) {
// show login page
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"login"];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
} else {
// show home page
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"home"];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
}
独立
NavController->mainVC->OtherStuff
答案 1 :(得分:1)
if(loggedIn) {
UIViewController *main = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"Main"];
[(UINavigationController *)self.window.rootViewController pushViewController:main animated:NO];
答案 2 :(得分:0)
导航控制器 - >登录控制器 - >主视图控制器 - >其他的东西
更改导航堆栈,
导航控制器 - >主视图控制器 - >其他的东西
因此主视图控制器是导航堆栈的RootViewController。
if(userloginstatus == YES) {
做其他事情,根据流程显示其他屏幕。
} 其他 {
从主视图控制器推送或显示“loginviewcontroller”, 因此,在成功登录后,只需弹出“loginviewcontroller”
即可}