UINavigationController不推视图控制器

时间:2012-10-01 13:53:17

标签: ios uinavigationcontroller ios-simulator

我创建了一个具有Login功能的应用程序。

它以欢迎视图控制器开始,检查用户是否已登录,打开登录视图控制器。如果用户已登录,或者一旦用户登录,就会将用户推送到主视图控制器。

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];

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

3 个答案:

答案 0 :(得分:1)

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

欢迎视图控制器然后检查用户,如果不是当前用户,则它呈现模态登录视图控制器

答案 1 :(得分:0)

一旦使用包含欢迎视图控制器的导航控制器启动窗口,就不需要推送导航控制器。

如果你想在这个堆栈中添加更多视图(在欢迎视图控制器内)你调用方法self.navigation controller pushviewcontroller ...如果你想从堆栈中删除,请调用popviewcontroller ..你将转到你的主视图堆栈(根)。

答案 2 :(得分:0)

试试这个:

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