【问题标题】:Get UIWindow without using AppDelegate不使用 AppDelegate 获取 UIWindow
【发布时间】:2014-10-17 14:15:34
【问题描述】:

我需要直接向窗口添加一个视图。我可以通过 UIApplication 访问 AppDelegate 上的窗口对象来做到这一点。我打算使此代码尽可能可重用,但这会使该方法无用。如何在不使用 AppDelegate 的情况下以编程方式访问 UIWindow?

我正在使用 Swift 进行编码,但 Objective-C 示例也可能会有所帮助。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    好的,这是我自己想出来的。你可以这样访问它:

    var window : UIWindow = UIApplication.sharedApplication().keyWindow
    

    斯威夫特 5:

    var window : UIWindow = UIApplication.shared.keyWindow
    

    请注意,keyWindow 在 iOS 13.0 中已弃用。 如果您的目标是 iOS 13.0 或更高版本,refer to this

    【讨论】:

    • 这已被弃用,你如何在 swift 5 中做到这一点?
    【解决方案2】:

    任何视图都有对当前窗口的引用。

    在 UIViewController 中:

    self.view.window
    

    【讨论】:

    • 嗯,我遇到了错误。 UIWindow 没有名为 addSubview 的成员,并且 UIWindow 没有名为“中心”的成员。注意:我在 UIView 上执行此操作,当从 UIViewController 调用其上的方法时,它试图将自身添加到窗口中。
    【解决方案3】:

    以下内容适用于 Swift 4,并且将安全地解开 UIWindow,因此不需要强制转换:

    if let window = UIApplication.shared.keyWindow { 
        // Do stuff
    }
    

    【讨论】:

      【解决方案4】:

      Swift 3 版本:

      let window :UIWindow = UIApplication.shared.keyWindow!
      

      【讨论】:

      • 欢迎来到stackoverflow。这篇文章质量很差,需要进行重大改进才能有用。请问,你能扩展你的答案吗?
      【解决方案5】:

      你会得到第一个窗口:

      let window = UIApplication.shared.windows[0]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 2015-08-16
        • 1970-01-01
        • 2013-08-26
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多