ios - Swift iOS - 添加第二个 UIWindow 不会出现

标签 ios swift uiwindow

我有第二个 UIWindow 添加到我的应用程序中。当我添加它时,窗口会短暂显示然后突然消失。它可能会显示十分之一秒,然后就消失了。我哪里出错了?

class AddSecondWindowClass: NSObject {

    let redVC = RedController()
    var window: UIWindow?

    func showSecondWindow() {

        let navVC = UINavigationController(rootViewController: redVC)
        navVC.navigationBar.isHidden = true
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.backgroundColor = .white
        window?.windowLevel = UIWindowLevelStatusBar
        window?.rootViewController = navVC
        window?.isHidden = false
        window?.makeKeyAndVisible()
    }
}

class RedController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .red
    }

    deinit {
        print("RedVC -DEINIT")
    }
}

带有显示窗口的按钮的不同类

@IBAction func triggerSecondWindowButton(_ sender: UIButton) {
    let addSecondWindowClass = AddSecondWindowClass()
    addSecondWindowClass.showSecondWindow()
}

最佳答案

问题是您没有保留 AddSecondWindowClass 对象。

您在 triggerSecondWindowButton(sender:) 方法中创建了一个变量,但是一旦该函数完成,addSecondWindowClass 就不再对其有任何引用,并且很快就会被销毁。当该对象被销毁时,您添加的窗口不再有引用,因此也会被销毁。

要解决这个问题,您只需在某个地方保留对 AddSecondWindowClass 的引用,只要您希望窗口可见,它就会一直保留。 (可能作为 triggerSecondWindowButton(sender:) 类中的属性或 ivar)。

关于ios - Swift iOS - 添加第二个 UIWindow 不会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51033932/

相关文章:

ios - UITableViewCell 何时何地完成布局?

ios - 克隆 UIImage iOS 部分时的内存问题

ios - 在 Swift 中子类化 UINavigationBar

ios - 具有警报级别的 UIWindow 位于状态栏级别之上

ios - 为什么我不能让我的新 UIWindow 出现在状态栏的顶部?

ios - 找不到 dyld 符号 DictionaryGenerator (IOS Xcode6 Beta4)

汇编代码中的 iOS 12 错误 swift_getAssociatedTypeWitnessSlowImpl EXC_BAD_ACCESS

ios - 由于 Transporter,我的应用程序不会上传。我怎样才能绕过这个?

ios - 如何跟踪某些 iPhone 设备 ID 以防止重新安装

ios - 你如何阻止 UIWindow 剪裁到旋转边界并显示 'black frame' ?