2015-01-14 32 views
9

我已經能夠想出的最好的是:如何處理applicationShouldHandleReopen在基於非文檔故事板應用

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 
} 

我不知道爲什麼蘋果不提供這方面的指導,或者讓你爲故事板設置窗口。這似乎是一個常見的事情需要。也許我仍然錯過了一些東西。

回答

5

如果您正在尋找非文檔應用程序的基於可可的解決方案。這相當於Adam的第二個解決方案。

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag 
{ 
    if(!flag) 
    { 
     for(id const window in theApplication.windows) 
     { 
      [window makeKeyAndOrderFront:self]; 
     } 
    } 
    return YES; 
} 
2

夫特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 
}