gpt4 book ai didi

ios - UIWindow setRootViewController 不清除现有层次结构

转载 作者:可可西里 更新时间:2023-11-01 03:58:02 27 4
gpt4 key购买 nike

在我的应用程序中,我根据用户操作以编程方式更改 Root View Controller ,例如登录/注销功能。

在 iOS 8 中 - 我注意到一个奇怪的问题。即使在窗口上设置了 rootViewController 之后,旧的层次结构仍然存在。我只是通过捕获 View 层次结构来验证它。

- (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;
}

即使在执行了这行代码之后,旧的登录 View 层次结构仍然存在。如果有人可以建议幕后发生的事情,我们将不胜感激。

编辑:我刚刚查看了 UIWindow setRootViewController 文档,这是 Apple 对此的评价:

The root view controller provides the content view of the window. Assigning a view controller to this property (either programmatically or using Interface Builder) installs the view controller’s view as the content view of the window. If the window has an existing view hierarchy, the old views are removed before the new ones are installed.

最佳答案

我也注意到了同样的事情。

基本上,我有一个相当复杂的 Storyboard,它充当登录/欢迎界面。该界面位于一个导航 Controller 中,该 Controller 以模态方式呈现另一个导航 Controller 。

在某个时间点之后,用户执行一个将他转换到主界面的操作。使用 iOS 8 View 调试器,我注意到在设置窗口的 rootViewController 属性后,旧的 View 层次结构仍然存在。

我的解决方案,目前是在我重新评估 window.rootViewController 属性之前使用以下代码:

for (UIView* subView in self.window.rootViewController.view.subviews) {
[subView removeFromSuperview];
}
[self.window.rootViewController.view removeFromSuperview];

它不是很漂亮,但它确实有效。

我注意到的另一件奇怪的事情是,欢迎界面的模态呈现的 viewController 没有使用此方法正确清理。我必须手动关闭它并进行清理。

关于ios - UIWindow setRootViewController 不清除现有层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795825/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com