我能够找到的最好答案是:
func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag{
let sb = NSStoryboard(name: "Main", bundle: nil)
let controller = sb?.instantiateInitialController() as NSWindowController
controller.window?.makeKeyAndOrderFront(self)
self.window = controller.window
}
return true
}
但是这需要我在我的应用程序委托上设置一个对窗口的引用。由于在应用程序最初启动时不需要这样做,我相当肯定我做错了什么,同时错过了一些显而易见的东西。
这个解决方案似乎也可以工作。
func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag{
for window in sender.windows{
if let w = window as? NSWindow{
w.makeKeyAndOrderFront(self)
}
}
}
return true
}
这里是我找到的第三种解决方案,可以在您的NSApplicationDelegate
中使用:
var mainWindow: NSWindow!
func applicationDidFinishLaunching(aNotification: NSNotification) {
mainWindow = NSApplication.sharedApplication().windows[0] as! NSWindow
}
func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag{
mainWindow.makeKeyAndOrderFront(nil)
}
return true
}
我不知道为什么苹果不对此提供指导,或者让您从故事板设置窗口的出口。这似乎是一个常见的需求。也许我还缺少一些东西。