2015-01-14 8 views
9

Najlepszą udało mi się dowiedzieć to:jak radzić applicationShouldHandleReopen w oparciu dla dokumentu Storyboard Aplikacja

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 
} 

Ale to wymaga, aby ustawić ref do okna na moim app delegata. Ponieważ nie jest to wymagane, gdy aplikacja początkowo się uruchamia, jestem całkiem pozytywna, robię coś złego, podczas gdy brakuje czegoś oczywistego.

To rozwiązanie również wydaje się działać

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 
} 

Oto 3rd rozwiązanie, które ja również znaleźć prace, z poziomu 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 
} 

nie mam pojęcia, dlaczego Apple nie dostarczaj wskazówek na ten temat lub pozwól ustawić wylot z storyboardu dla okna. Wygląda na to, że często potrzeba. Może nadal po prostu coś mi brakuje.

Odpowiedz

5

Jeśli szukasz rozwiązania opartego na kakao dla aplikacji niebędących dokumentami. Jest to odpowiednik drugiego rozwiązania Adama.

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

Swift 3 W AppDelegate.swift dodać zmienną typu NSWindow

lazy var windows = NSWindow() 

i wdrożenie applicationShouldHandleReopen:

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 
    if !flag { 
     for window in sender.windows { 
      window.makeKeyAndOrderFront(self) 
     } 
    } 

    return true 
} 
Powiązane problemy