メニューに特殊なショートカットキーを割り当てる

Cocoaに関するヌマタメモ
2008年11月29日 23:29

メニュー項目にリターンキーやdeleteキーなどの特殊なキーを割り当てるには、Interface Builder で、メニュー項目のショートカットキーの表示部分(表示されるであろう部分)をダブルクリックしてショートカットキーを入力する。

通常はこれで事足りるが、以下にプログラム的に動的にこれを行う方法を示す。

対象のメニュー項目に対するアウトレット(NSMenuItem)を作成しておき、awakeFromNib あたりのタイミングで、次のようにする。

unichar c = NSBackspaceCharacter;
[myMenuItem setKeyEquivalent:[NSString stringWithCharacters:&c length:1]];

それぞれのキーの割り当ては、

  • deleteキー:NSBackspaceCharacter
  • delキー:NSDeleteCharacter
  • returnキー:NSNewlineCharacter
  • enterキー:NSEnterCharacter
  • tabキー:NSTabCharacter
  • home/endキー:NS{Home,End}FunctionKey
  • pageup/downキー:NSPage{Up,Down}FunctionKey
  • helpキー:NSHelpFunctionKey
  • 矢印キー:NS{Up,Down,Left,Right}ArrowFunctionKey
  • ファンクションキー:NS{F1,...,F12}FunctionKey

である。それぞれの定数は、NSTextクラスおよびNSEventクラスの定数として定義されている。

モディファイアキーを変更する場合は、

[myMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask|NSShiftKeyMask];

のようにする。NSCommandKeyMask、NSAlternateKeyMask、NSShiftKeyMask の3つが指定可能である。モディファイアキーを付けない場合、0を指定する。

NSMenuItemクラスの説明には、NSShiftKeyMask に関連して NSFunctionKeyMask についての説明があるが、そこに書かれているような不具合は10.2.6では見られないので、とりあえず上の3つのフラグを任意に組み合わせれば良いように思う(まずいかもしれない)。

コメントを書く


トラックバックはありません。

トラックバックURL: http://numata.designed.jp/mt-tb.cgi/78