2016-05-12 18 views
1

私のOS Xアプリケーションでは、Escキーでフルスクリーンウィンドウを閉じる必要があります。だから、NSWindowControllerのインスタンスを(ウィンドウ内のコードから動的に作成された)私のウィンドウの最初のレスポンダに設定し、カスタム実装でkeyDown関数をオーバーライドしてウィンドウを閉じます。フルスクリーンNSWindowからのキーイベントを処理できません

:しかし、残念ながら窓が CGShieldingWindowLevelにレベルを設定しているとき、 keyDownkeyUp関数が呼び出されていない

私は、ウィンドウを作成しています(私はフルスクリーンウィンドウにクリックし、Escキーを押す前に、当然のはとてもウィンドウにフォーカスしている必要があります)

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! 
    } 

とでキーを処理します。

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

答えて

3

NSWindow.canBecomeKeyWindowのためのドキュメントを参照してください。デフォルトでは、境界線のないウィンドウはキーになることはできません。 trueを返すには、それをオーバーライドする必要があります(そしておそらくcanBecomeMainWindow)。

関連する問題