如何在Swift中从UIApplication中删除窗口

如何在Swift中从UIApplication中删除窗口,swift,xcode,uiwindow,uiapplication,Swift,Xcode,Uiwindow,Uiapplication,单击该按钮时,我使用以下代码移动到另一个视图控制器 var window: UIWindow? window = UIWindow.init(frame: UIScreen.main.bounds) window?.autoresizesSubviews = true window?.autoresizingMask = [.flexibleWidth, .flexibleHeight] let trackingViewController = LoginCameraViewController

单击该按钮时,我使用以下代码移动到另一个视图控制器

var window: UIWindow?
window = UIWindow.init(frame: UIScreen.main.bounds)
window?.autoresizesSubviews = true
window?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
let trackingViewController = LoginCameraViewController.init(screen: 
.main)
window?.rootViewController = trackingViewController
window?.addSubview((trackingViewController?.view)!)
window?.makeKeyAndVisible()
window?.layoutSubviews()
let windowz = UIApplication.shared.windows
print("subviews",windowz)
每次单击按钮,都会向应用程序添加一个新窗口。我想删除添加的最新窗口。 使用以下代码可以知道应用程序中存在的窗口数

var window: UIWindow?
window = UIWindow.init(frame: UIScreen.main.bounds)
window?.autoresizesSubviews = true
window?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
let trackingViewController = LoginCameraViewController.init(screen: 
.main)
window?.rootViewController = trackingViewController
window?.addSubview((trackingViewController?.view)!)
window?.makeKeyAndVisible()
window?.layoutSubviews()
let windowz = UIApplication.shared.windows
print("subviews",windowz)

我认为你在iOS中得到了错误的导航概念。窗口就像一个根对象,其中显示ViewController。因此,您首先要寻找的解决方案可能是UINavigationController


您应该使用视图控制器,而不是添加窗口,并将其弹出到要删除窗口的位置。 窗口是应用程序的唯一对象,将包含视图。
请更正您的理解并使用视图控制器。

在下面的代码中windowz是普通阵列

let windowz = UIApplication.shared.windows 
您可以使用删除最后一个

windowz.removeLast()
对于iOS 13,我可以这样做

我创建了一个数组,其中包含用于显示新viewController的窗口

var arrWindow = [UIWindow]()
arrWindow.append(yourNewWindow)
//注意:这将作为强引用存储,因此需要将其删除

还可以将原始窗口存储在变量中

let originalWindow = yourOriginalWindow
//注意:这也是一样,它将作为强引用存储,因此需要删除它

移除时有很多方法,但这是最适合我的方法

 func removeAppendedWindow() {

     for window in arrWindow {
         if window != originalWindow {
              if let index = arrWindow.index(of: window) {
                  window.isHidden = true
                  arrWindow.remove(at: index)
              }
         }
     }
}

为什么你一直在添加一个新窗口而不是使用你现有的窗口?@CyberMew你能解决iOS 13的问题吗?@Niki不幸的是没有,而且随着多个窗口的出现,我不确定是否要继续手动操作它们。@CyberMew我至少能够用我上面提到的方式处理我的情况UIWindow是UIView的核心。在有意义的应用程序中使用UIWindow没有什么错。