2016-05-12 11 views
1

In meiner OS X-App muss ich ein Vollbild-Fenster mit der Esc-Taste schließen. Also setze ich meine Instanz NSWindowController als Ersthelfer für mein Fenster (dynamisch aus Code im Controller erstellt), überging die keyDown Funktion mit meiner benutzerdefinierten Implementierung, um das Fenster zu schließen. Aber leider, wenn Fenster Ebene CGShieldingWindowLevel gesetzt hat, keyDown und keyUp Funktionen nicht aufgerufen werden (natürlich bevor ich Esc drücken klicken ich auf das Vollbild-Fenster so sollten Fenster den Fokus hat)Schlüsselereignisse können nicht mit Vollbild bearbeitet werden NSWindow

ich das Fenster bin Erstellen mit:

self.window = NSWindow(
     contentRect: screen.frame, 
     styleMask: NSBorderlessWindowMask, 
     backing: NSBackingStoreType.Buffered, 
     defer: false, 
     screen: screen 
    ) 

    if let w = window { 
     w.level = Int(CGShieldingWindowLevel()) 
     w.backgroundColor = NSColor.blackColor() 
     w.makeKeyAndOrderFront(self) 
     w.makeFirstResponder(self) 

     self.webView = WKWebView(frame: w.frame, configuration: config) 
     w.contentView = webView! 
    } 

und Griff Schlüssel mit:

override func keyDown(theEvent: NSEvent) { 
    if (theEvent.keyCode == 53) { 
     self.window?.close() 
    } 
} 

Antwort

3

Lesen Sie die Dokumentation für NSWindow.canBecomeKeyWindow. Standardmäßig kann ein randloses Fenster nicht zum Schlüssel werden. Sie müssen das überschreiben (und vielleicht canBecomeMainWindow), um wahr zurückzugeben.