如何删除UIWindow?

G33*_*z0r 29 iphone cocoa-touch uiwindow ios4 ios

我觉得这很简单[myWindow resignKeyWindow],[self.window makeKeyAndVisible]但我猜不是......你们不知道该怎么办?

谢谢 :)

Nik*_*uhe 81

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

当然,您希望此时有另一个窗口.

  • ios 12现在无法正常工作,似乎无法在将makeKeyWindow之后从UIApplication的窗口中删除它。 (4认同)
  • 它不再删除键窗口,并且列表不断增长。还有其他想法吗? (4认同)

bio*_*ffe 15

不要-resignKeyWindow直接调用,当你的UIWindows被删除时,它被覆盖以执行一些代码.为了删除旧窗口,您需要创建UIWindow的新实例并进行创建-makeKeyAndVisible,旧窗口将重新签名其关键状态.在iOS 4中,如果您没有任何对它的引用,它甚至会垃圾收集您的旧UIWindow.在iOS 3.x中执行此操作会产生灾难性后果.警告你.

  • 这确实改变了哪个窗口是keyWindow,但似乎没有从application.windows中删除它.... (8认同)

Vad*_*vin 9

以下是如何UIWindow以向后兼容的方式在 iOS 13 上删除。在支持多窗口的 iOS 12、iOS 13、iPadOS 上测试:

extension UIWindow {
    func dismiss() {
        isHidden = true

        if #available(iOS 13, *) {
            windowScene = nil
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

// Detect key window
let keyWindow = UIApplication.shared.windows.first { $0.isKeyWindow }

// Dismiss key window (if any)
keyWindow?.dismiss()
Run Code Online (Sandbox Code Playgroud)