我能够弄清楚的最好的是:
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
}
但是这需要我在我的app委托上设置一个ref窗口。因为应用程序最初启动时不需要这样做,所以我非常肯定我在做错了什么而丢失了一些明显的东西。
此解决方案似乎也有效
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
}
我不知道为什么Apple不提供相关指导,或者让您从窗口的故事板中设置插座。这似乎是一件普通的事情。也许我还在遗漏一些东西。
答案 0 :(得分:6)
如果您正在为非文档应用寻找基于可可的解决方案。这相当于亚当的第二个解决方案。
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
{
if(!flag)
{
for(id const window in theApplication.windows)
{
[window makeKeyAndOrderFront:self];
}
}
return YES;
}
答案 1 :(得分:5)
Swift 3 :在AppDelegate.swift中添加一个类型为NSWindow的变量
lazy var windows = NSWindow()
并实现applicationShouldHandleReopen:
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag {
for window in sender.windows {
window.makeKeyAndOrderFront(self)
}
}
return true
}
或使用forEach:
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag {
sender.windows.forEach { $0.makeKeyAndOrderFront(self) }
}
return true
}