Naz*_*Mir 7 uikit uiview ios ios8
在我的应用程序中,我以编程方式根据用户操作(例如登录/注销功能)更改根视图控制器.
在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;
}
Run Code Online (Sandbox Code Playgroud)
即使在执行此行代码后,旧的登录视图层次结构仍然存在.如果有人能够提出幕后发生的事情,我将不胜感激.
编辑:我只看了UIWindow setRootViewController文档,这里是Apple对它的评价:
根视图控制器提供窗口的内容视图.将视图控制器分配给此属性(以编程方式或使用Interface Builder)将视图控制器的视图安装为窗口的内容视图.如果窗口具有现有视图层次结构,则在安装新视图之前将删除旧视图.
小智 2
我也注意到了同样的事情。
基本上,我有一个相当复杂的故事板,充当登录/欢迎界面。该界面位于导航控制器中,该控制器以模态方式呈现另一个导航控制器。
在某一点之后,用户执行将他转换到主界面的操作。使用 iOS 8 视图调试器,我注意到在设置窗口的 rootViewController 属性后,旧的视图层次结构仍然存在。
我的解决方案目前是在重新分配 window.rootViewController 属性之前使用以下代码:
for (UIView* subView in self.window.rootViewController.view.subviews) {
[subView removeFromSuperview];
}
[self.window.rootViewController.view removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
它不漂亮,但很有效。
我注意到的另一个奇怪的事情是,欢迎界面的模态呈现的 viewController 没有使用此方法正确清理。我必须手动关闭它并进行清理。
| 归档时间: |
|
| 查看次数: |
3234 次 |
| 最近记录: |