我有2个ViewControllers,我使用App委托根据用户交互切换它们。
在AppDelegate.m中我有:
- (void) switchViews
{
if (_viewController.view.superview == nil) {
[_window addSubview:_viewController.view];
[_window bringSubviewToFront:_viewController.view];
[viewController2.view removeFromSuperview];
} else
{
[_window addSubview:_viewController2.view];
[_window bringSubviewToFront:_viewController2.view];
[_viewController.view removeFromSuperview];
}
}
_viewController用于主视图,_viewController2用于glview(我使用的是isgl3d)。交换机工作,但每次我切换回glview,我看到顶部的重复视图,我怀疑即使主视图也是重复的。
任何想法如何完全删除视图以便我没有这个问题?谢谢!
答案 0 :(得分:2)
您不应该添加和删除这样的视图,只需更改哪个控制器是窗口的根视图控制器。这样做会使新控制器的视图成为窗口的子视图,并删除旧控制器的视图。
if ([self.window.rootViewController isEqual: _viewController]) {
self.window.rootViewController = viewController2;
}else{
self.window.rootViewController = viewController;
答案 1 :(得分:0)
在看完斯坦福编码后,我发现了如何做到这一点:IOS。
我不知道VC的一些关键信息:
每次VC实例化时,都会调用viewDidLoad
一次来设置所有重要的东西,如outlet等。然后,在视图交换之间将调用viewWillAppear
和viewWillDisappear
。因为在向用户显示视图之前只调用它,所以在此处设置所有几何设置,如视图方向和大小。
所以我所做的是:
我addSubview
viewDidLoad
,viewWillappear
和viewWillDisappear
中的所有正在运行的设置。
还有一个注意事项:只要应用仍在运行,视图就会保留在那里。
无论如何,谢谢rdelmar的帮助。