为啥 AppDelegate 中的窗口为零

Posted

技术标签:

【中文标题】为啥 AppDelegate 中的窗口为零【英文标题】:Why window is nil in AppDelegate为什么 AppDelegate 中的窗口为零 【发布时间】:2014-11-23 19:15:33 【问题描述】:

我需要从AppDelegate呈现视图控制器,所以我写了以下代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let authViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as ViewController
if let keyWindow = UIApplication.sharedApplication().keyWindow 
    keyWindow.rootViewController = authViewController

很遗憾,windowkeyWindow 都是 nil。为什么?

【问题讨论】:

这段代码什么时候执行? @jrturton 这是在func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool函数中执行的代码 好的,在那个函数中你的应用程序不会有一个窗口,除非你手动创建了一个窗口,或者你已经设置了一个故事板或 xib 作为启动界面。你做到了吗? @jrturton 没有。我怎样才能通过 Interface Builder 做到这一点? 【参考方案1】:

如果不使用主界面选项,则需要在AppDelegate中自己创建窗口:

self.window = UIWindow(frame:UIScreen.mainScreen().bounds)

Swift 3.0+

self.window = UIWindow(frame: UIScreen.main.bounds)

然后使用window 调用上面的代码。

最后,在窗口拨打makeKeyAndVisible()

【讨论】:

我不想自动加载初始视图控制器,因为我需要手动呈现授权视图控制器或主视图控制器 感谢您的回答!顺便说一句,window 没有makeKeyAndOrderFront 功能 在没有makeKeyAndVisible 函数调用的情况下也可以正常工作。有必要吗? 它总是在模板上,所以我假设是这样。不知道。 对于 Swift 5 self.window = UIWindow(frame:UIScreen.main.bounds)

以上是关于为啥 AppDelegate 中的窗口为零的主要内容,如果未能解决你的问题,请参考以下文章

appdelegate 共享实例委托

如何从appdelegate打开弹出窗口?

AppDelegate Swift 中的选项卡式应用程序和核心数据函数

UIApplication 中的窗口和 AppDelegate 中的窗口是啥关系?

向 AppDelegate 添加协议未注册

为啥 QueryVertices 中的所有坐标都为零?