UINavigationController 不推送视图控制器
Posted
技术标签:
【中文标题】UINavigationController 不推送视图控制器【英文标题】:UINavigationController not pushing view controller 【发布时间】:2012-10-01 13:53:17 【问题描述】:我创建了一个具有登录名的应用程序。
它从一个欢迎视图控制器开始,检查用户是否登录,如果没有,打开一个登录视图控制器。如果用户已登录,或者一旦用户登录,就会像这样将用户推送到 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];
它会按预期关闭设置视图控制器,但导航控制器仍保留在主页视图上。没有错误,有谁知道为什么这不能正常工作?
【问题讨论】:
删除这一行 [self.navigationController pushViewController:welcomeViewController animated:YES];告诉我我们发生了什么? 【参考方案1】:通过重新排列代码解决。在 appdelegate 上搜索当前用户,然后要么加载带有主视图根控制器的导航控制器,要么运行加载欢迎视图控制器的方法。
欢迎视图控制器也会检查用户,如果不是当前用户,它会显示模式登录视图控制器
【讨论】:
【参考方案2】:一旦你用包含欢迎视图控制器的导航控制器初始化你的窗口,你就不需要推送导航控制器。
如果你想在这个堆栈中添加更多视图(在欢迎视图控制器内)你调用方法 self.navigation 控制器 pushviewcontroller ...如果你想从堆栈中删除,调用 popviewcontroller..你会去你的主视图堆栈(根)。
【讨论】:
是否每个被推送到导航控制器的视图控制器都保留在堆栈中,直到您将其弹出?如果是这样,我应该弹出主视图控制器以返回欢迎视图,还是有办法从现有堆栈列表中更改当前显示的视图控制器。下面的建议没有奏效,它仍然在家里。【参考方案3】:试试这个:
// Take me back to the root navigation view controller (APPWelcomeViewController)
[self.navigationController popToRootViewControllerAnimated:YES];
【讨论】:
以上是关于UINavigationController 不推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
关闭 UINavigationController 并呈现另一个 UINavigationController
iOS:如何在现有 UINavigationController 中打开另一个 UINavigationController?
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller
带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?