メニュー項目にリターンキーや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つのフラグを任意に組み合わせれば良いように思う(まずいかもしれない)。
コメントを書く