2012-10-01 82 views
0

我已经创建了一个具有登录的应用程序。UINavigationController不推视图控制器

它以欢迎视图控制器开始,检查用户是否登录,如果不是,则打开登录视图控制器。如果用户已登录,或者一旦他们将用户推送到Home View Controller,就像这样。

App Delegate (did finish launching) 

self.welcomeViewController = [[APPWelcomeViewController alloc] init]; 
self.homeViewController = [[APPHomeViewController alloc] initWithNibName:@"APPHomeViewController" bundle:nil]; 

self.navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController]; 
self.navController.navigationBarHidden = YES; 

self.window.rootViewController = self.navController; 

一旦用户登录,它将推送主视图。

// Push the homeViewController onto the navController 
[self.navController pushViewController:self.homeViewController animated:YES]; 

这一切都正常工作到这一点。然后,我使用模式视图控制器设置,其中包括注销按钮。用户的注销运行如下:

// Log the user out 
[User logOut]; 

// Then we need to remove the Settings Modal View Conrtoller 
[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

// Then we need to take user back to welcomeViewController 
[self.navigationController pushViewController:welcomeViewController animated:YES]; 

它按预期取消设置视图控制器,但导航控制器保持在主视图上。没有错误,有谁知道为什么这不能正常工作?

+0

删除此行[self.navigationController pushViewController:welcomeViewController动画:YES];并告诉我我们发生了什么? – CRDave

回答

0

通过重新排列代码解决。在appdelegate上搜索当前用户,然后使用主视图的根控制器加载导航控制器或运行加载欢迎视图控制器的方法。

欢迎视图控制器然后用户检查,以及,如果没有当前用户它呈现模态登录视图控制器

0

一旦你用包含欢迎视图控制器的导航控制器初始化你的窗口,你就不需要推动导航控制器。

如果你想添加更多的视图内部(欢迎视图控制器内)你调用方法self.navigation控制器pushviewcontroller ...如果你想从堆栈中删除,调用popviewcontroller ..你会去你的主视图堆栈(根)。

+0

推送到导航控制器的每个视图控制器是否保留在堆栈上,直到弹出它为止?如果是这样,我应该弹出主视图控制器以返回到欢迎视图,还是有方法将当前显示的视图控制器从现有堆栈列表中更改。下面的建议不起作用,它仍然在家里。 – StuartM

0

试试这个:

// Take me back to the root navigation view controller (APPWelcomeViewController) 
[self.navigationController popToRootViewControllerAnimated:YES]; 
相关问题