0

我有 2 个 ViewController,我使用 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 时,我都会在顶部看到重复的视图,我怀疑即使是主视图也是重复的。

知道如何完全删除视图,以免出现此问题吗?谢谢!

4

2 回答 2

2

您不应该像这样添加和删除视图,只需更改哪个控制器是窗口的根视图控制器。这样做会使新控制器的视图成为窗口的子视图,并删除旧控制器的视图。

if ([self.window.rootViewController isEqual: _viewController]) {
    self.window.rootViewController = viewController2;
}else{
    self.window.rootViewController = viewController;
于 2013-04-15T16:19:52.150 回答
0

在观看了 Stanford Coding Together:IOS 之后,我发现了如何做到这一点。

我不知道的 VC 的一些关键信息:每次 VC 实例化时,viewDidLoad都会调用一次以设置所有重要的东西,如插座等。然后viewWillAppearviewWillDisappear将在视图交换之间被调用。因为它在视图显示给用户之前被调用,所以所有的几何设置,如视图方向和大小都在这里设置。

所以我要做的是:我addSubview在 中,在和viewDidLoad中进行所有运行设置。viewWillappearviewWillDisappear

还有一点需要注意:只要应用程序仍在运行,视图就会一直存在。

无论如何感谢 rdelmar 的帮助。

于 2013-04-16T12:27:04.963 回答