为啥 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
很遗憾,window
和 keyWindow
都是 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 Swift 中的选项卡式应用程序和核心数据函数