2017-11-23 24 views
1

Swiftでは、キーボードキーがヒットしたことを登録できるように、プレスを処理する機能がCocoaフレームワークにありますか?エスケープキープレスイベントの処理方法は?

私はエスケープキーを取得したいのですが

更新: 理由を仕事に ウィッヒが事のために必要されていません。私はただの雑音が(イベントで) super.keyDownでcasuedたことがわかっ その行を追加しましたか?

答えて

1

NSWindowのサブクラスを作成し、keyDownイベントを実装:

import Cocoa 
import Carbon.HIToolbox 

class CustomWindow: NSWindow { 

    override func keyDown(with event: NSEvent) { 
     switch Int(event.keyCode) { 
     case kVK_Escape: 
      print("Esc pressed") 
     default: 
      break 
     } 
     super.keyDown(with: event) 
    } 

} 

この行を:

import Carbon.HIToolbox 

を使用すると、kVK_Escapeなどのキーのための便利な定数を使用できます。

Interface Builderであなたのメインウィンドウクラスとしてこのクラスを設定し、あなたはすべてのセットだ:

enter image description here

enter image description here

P.S. viewDidLoadで、同じフォームNSViewControllerを行うには、実行します。

NSEvent.addLocalMonitorForEvents(matching: .keyDown) { 
    self.keyDown(with: $0) 
    return $0 
} 

P.P.S.を

default: 
    super.keyDown(with: event) 

をEDIT:

何かが上に聞こえるしたくない場合は、デフォルトのスーパーコールを動かす - 「ビッグバン」の音をミュートするには、エスケープキーを押し時にスーパーを呼び出すことはありません。キーを押して脱出、次のアプローチを使用する必要があります。

NSViewサブクラスを作成し、ビューコントローラのメインビューに設定します。

import Cocoa 
import Carbon.HIToolbox 

class CustomView: NSView { 
    override func performKeyEquivalent(with event: NSEvent) -> Bool { 
     switch Int(event.keyCode) { 
     case kVK_Escape: 
      print("Esc pressed") 
      return true 
     default: 
      return super.performKeyEquivalent(with: event) 
     } 
    } 
} 
+0

awsome nswer、メインのviewcontrolerからオーバーライド機能を実行することは可能でしょうか? –

+0

また、私は私のアプリでエスケープすると、それはバングサウンドは、それをオフにする方法はありますか? –

+0

スーパーが呼び出されているため、「バング」サウンドが再生されます。 'super.keyDown(with:event)'という行をデフォルトの実装にすることができます。これにより、Escapeキーを押したときに呼び出されるのを避けることができます。 – Hexfire

関連する問題