【发布时间】:2015-01-03 22:11:55
【问题描述】:
在我的应用程序中,我以编程方式根据用户操作更改根视图控制器,例如登录/注销功能。
在 iOS 8 中 - 我注意到一个奇怪的问题。即使在窗口上设置了 rootViewController,旧的层次结构仍然存在。我只是通过捕获视图层次结构来验证它。
- (void) logout{
[self.window setRootViewController:[self loadLoginView]];
}
-(UIViewController *) loadLoginView{
WelcomeScreenVC *wsVC;
wsVC = [[WelcomeScreenVC alloc] initWithNibName:@"WelcomeScreenVC" bundle:nil];
UINavigationController *onboardingVC = [[UINavigationController alloc]initWithRootViewController:wsVC];
return onboardingVC;
}
即使在执行了这行代码之后,旧的登录视图层次结构仍然存在。如果有人能建议幕后发生的事情,将不胜感激。
编辑:我刚刚查看了 UIWindow setRootViewController 文档,以下是 Apple 对此的评价:
根视图控制器提供窗口的内容视图。 将视图控制器分配给此属性(以编程方式 或使用 Interface Builder)将视图控制器的视图安装为 窗口的内容视图。如果窗口具有现有视图 层次结构,旧视图在新视图被删除之前被删除 已安装。
【问题讨论】:
-
可以分享
[self loadLoginView]的代码吗? -
@JoshHeald 将其添加到问题中
-
是直接从您的应用中复制出来的,还是您输入的?我问是因为
loadLoginView声明了void返回类型,这无济于事 -
@JoshHeald,对不起,我从应用程序中复制了它,但在编辑时删除了一些敏感信息。该方法的返回类型是 UIViewController
-
没问题。我正在努力重新创建它,但想知道你是如何检查层次结构的——你说你“通过捕获视图层次结构来验证它”,这是使用新的 Xcode 6 View Hierarchy Debugger 还是其他方式?跨度>