如何删除一个UIWindow?

我认为这很容易,因为[myWindow resignKeyWindow][self.window makeKeyAndVisible]但我猜不是…你们知道该怎么办?

谢谢 :)

不要直接调用-resignKeyWindow ,当你的UIWindows被移除的时候,它被重写来执行一些代码。 为了移除旧窗口,您需要创buildUIWindow的新实例并将其设置为-makeKeyAndVisible ,旧窗口将会退出其关键状态。 在iOS 4中,它甚至会垃圾回收旧的UIWindow ,只要你没有任何引用。 在iOS 3.x中这样做会产生灾难性的影响。 警告过你。

隐藏窗口的正确方法是将hidden属性设置为YES。 要从UIApplication的windows属性中删除它,只需释放该窗口(在ARC中,您将所有引用设置为nil)。

当然,你会希望在这个时候有另一个窗口。

您不能从App Delegate中删除窗口。 但是,您可以删除任何自定义窗口创build。

要删除窗口,您必须先提供replace。 所以我们得到默认窗口。

  AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

我们现在可以通过appdelegate.window属性访问默认窗口。

现在得到原始或自定义导航控制器。 将自己指定为rootviewcontroller。

调用makekey和visible将删除任何窗口,并将appdelegates窗口指定为关键窗口。 设置rootViewController为NavigationController你刚创build,你很好去!

  DEMONavigationController *demoNav = [[DEMONavigationController alloc]initWithRootViewController:self]; [appDelegate.window makeKeyAndVisible]; appDelegate.window.rootViewController = demoNav; 

谢谢!

我有同样的问题,它可能会有所帮助。

你需要在删除和释放一个窗口之前销毁所有的强大的引用,特别是rootWindowController。 我觉得下面的代码足以删除任何窗口:

  [self.window.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; self.window.rootViewController = nil; [self.window resignKeyWindow]; [self.window removeFromSuperview];