0

我创建了一个具有登录名的应用程序。

它从一个欢迎视图控制器开始,检查用户是否登录,如果没有,打开一个登录视图控制器。如果用户已登录,或者一旦他们登录,就会像这样将用户推送到 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];

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

4

3 回答 3

1

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

然后欢迎视图控制器也检查用户,如果不是当前用户,它会显示模式登录视图控制器

于 2012-10-02T20:03:30.103 回答
0

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

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

于 2012-10-01T14:08:45.303 回答
0

试试这个:

// Take me back to the root navigation view controller (APPWelcomeViewController)
[self.navigationController popToRootViewControllerAnimated:YES];
于 2012-10-01T14:08:48.617 回答