2016-05-30 23 views
2

Ich begann mit einem Storyboard-Projekt. und ich habe Menübar Artikel. Wenn auf das Menüelement geklickt wird, wird die folgende Methode in AppDelegate.swift ausgelöst.activateIgnoringOtherApps und makeKeyAndOrderFront funktioniert nicht, nachdem NSWindow geschlossen wurde

func setWindowVisible() { 
    NSApp.activateIgnoringOtherApps(ture) 
    NSApp.mainWindow?.makeKeyAndOrderFront(self) 
} 

dies bringt meine App in den Vordergrund. Aber sobald ich auf den Schließen-Knopf klicke, den Roten auf dem Fenster, funktioniert es nie.

Es arbeitete in non-Storyboard-basierten Projekten, egal, ich schließe das Fenster.

ich gesetzt haben

NSApp.mainWindow?.releasedWhenClosed = false 

in applicationDidFinishLaunching()

Kann mir jemand bitte helfen?

Antwort

3

Einstellung releasedWhenClosed in applicationDidFinishLaunching hat keine Wirkung, da die mainWindow Eigenschaft in diesem Moment Null ist. → Das Fenster wird erstellt, nachdem diese Methode ausgeführt wurde.

Die releasedWhenClosed wird sowieso als falsch festgelegt, wenn das Fenster in Interface Builder erstellt wird.

Die Eigenschaft mainWindow ist vermutlich nach dem Schließen des Fensters gleich null, weil dann kein mainWindow mehr vorhanden ist. Aus der Dokumentation:

Der Wert in dieser Eigenschaft ist Null, wenn das Storyboard oder die NIB-Datei der Anwendung noch nicht fertig geladen wurde. Es kann auch Null sein, wenn die App inaktiv oder versteckt ist.

konnte ich das Fenster wieder zeigen (nach Schließen) durch das Fenster aus dem Innern des windows Array von NSApp erreichbar.

NSApp.activateIgnoringOtherApps(true) 
NSApp.windows[0].makeKeyAndOrderFront(self) 

Falls Sie mehr als ein Fenster, können Sie die richtigen im Array ..

+0

noch kein Glück finden müssen. Ich habe ein Fenster, das die Xcode-Vorlage bietet –

+0

Können Sie das Windows-Array drucken? – mangerlahn

+0

Ich habe gerade gelöst. var window: NSWindow! Mit dieser Eigenschaft wird window = NSApp.mainWindow! in applicationDidBecomeActive(), dann self.window.makeKeyAndOrderFront (self) in meiner Methode. –