2017-10-20 8 views
4

私は最初の項目としてテキストフィールドを持つmacOSメニューバーアプリケーションを作成しようとしています。テキストフィールドは、その下に表示される他のアイテムをフィルタリングするための検索バーとして機能します。1PasswordのようなmacOSメニューバーアプリケーションの作成

それは1Passwordのに非常によく似ているはずです:

1password

をこれは私がやって管理するものである:

mine

私は3つの項目でStatus menuを作成することによって、これを達成したとメニューの最初の項目のカスタム表示を作成します。

しかし、このアプローチでは私の問題は解決していないようです。検索フィールドでcmd + Aを押すと、フォーカスはメニューの次の項目にジャンプします。これはNSMenuのデフォルト動作です。

私の質問は、これは1Passwordのようなアプリを作成する正しい方法ですか、それとも良い方法ですか?

答えて

2

基本的には正しいアプローチです。

しかし、編集キーイベントを明示的にキャッチする必要があります。サブクラスNSTextFieldと私はサブクラス `クラスSearchField作成したperformKeyEquivalent

class AXCVTextField: NSTextField { 

    override func performKeyEquivalent(with event: NSEvent) -> Bool { 
     if event.modifierFlags.contains(.command) { 
      if let key = event.charactersIgnoringModifiers { 
       var action : String? 
       switch key { 
       case "x": action = "cut:" 
       case "c": action = "copy:" 
       case "v": action = "paste:" 
       case "a": action = "selectAll:" 
       default: 
        break 
       } 
       if action != nil { 
        return NSApp.sendAction(Selector(action!), to:self.window!.firstResponder, from:self) 
       } 
      } 
     } 
     return super.performKeyEquivalent(with: event) 
    } 
} 
+0

上書き:{...} NSTextFieldを'とNSTextField'のクラス 'として設定します。しかし、 'cmd + A 'を押すとメソッドは起動しません。また、私はときに私はアプリを実行すると、私は入力をクリックすることができないことに気づいた。それは応答しなくなりますが、他の 'NSMenuItem'は正しく動作します。 –

+0

もちろん、テキストフィールドがキーイベントを受け取るレスポンダチェーンにあるというビューを設計する必要があります。 – vadian

+0

もう少し詳しく説明してください。私はそれをグーグルで探そうとしている –

関連する問題