在UIViewController的viewDidLoad方法中,我这样做是为了在我的iOS应用程序中获取keyWindow引用:
UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];
字符串
因此,我将这个视图控制器移植到Swift中,并执行viewDidLoad调用:
let window = UIApplication.sharedApplication().keyWindow
型
我试图理解为什么窗口为nil。当我在该行后面放置一个断点时,我然后在控制台中检查窗口,我得到了这个:
(lldb) po window
nil
型
如何让window成为swift中我的应用程序的keyWindow的有效引用?
7条答案
按热度按时间l7wslrjt1#
当我在Swift中搜索获取窗口时,我遇到了这个问题。如果你想获取窗口而不是keyWindow,试试这个(Swift 2):
字符串
Swift 3更新:(感谢@特雷弗)
型
mwecs4sa2#
Swift 4只有
UIApplication.shared.keyWindow
属性,不需要强制转换。请注意,iOS 13/iPadOS引入了
UIScenes
和对多个窗口的显式支持,因此不赞成keyWindow
的概念,因为它不再有效。This问题概述了如何访问基于场景的窗口。
f0ofjuux3#
Swift 5.1
为我工作
如果你也在寻找一种方法来处理
foreground
和background
模式,你应该试试这个。字符串
11dmarpk4#
更新superarts.org对Swift 3的回答:
字符串
8gsdolmq5#
最简单的方法是:
在Objective-C中
字符串
在Swift中
型
请注意,只有当您不支持多个窗口时,这才有效。
edqdpe6u6#
在viewDidLoad的时候,关键窗口必须还没有被设置。你的代码在viewDidAppear中工作正常。或者,你可以在viewDidLoad中获取窗口数组,并从该数组中获取一个(如果有多个)窗口。
gpnt7bae7#
不要在didLoad函数中调用window在ViewController的viewDidAppear函数中调用keyWindow