可可:设置密钥等价物

Eik*_*chu 14 cocoa key hotkeys objective-c menuitem

我想用[menuitem setKeyEquivalent:(NSString*)s]设置menuitem的等效键,如果我有多个修饰符,我该怎么做?

我试过了:

unichar shift = NSShiftKeyMask, cmd = NSCommandKeyMask;
NSMutableString *keyequiv = [[NSMutableString alloc] init];

[keyequiv appendString:[NSString stringWithCharacter:&shift, 1]];
[keyequiv appendString:[NSString stringWithCharacter:&cmd, 1]];
[keyequiv appendString:@"x"];
[menuItem setKeyEquivalent:keyequivalent];
Run Code Online (Sandbox Code Playgroud)

但那不起作用.

Jos*_*ell 24

修饰键关键掩码就是:掩码,而不是字符.您不能将它们插入到密钥等效字符串中.要应用它们,请使用setKeyEquivalentModifierMask:

[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask];
[menuItem setKeyEquivalent:@"x"];
Run Code Online (Sandbox Code Playgroud)

与任何其他掩码一样,使用按位OR运算符|来组合.有关详细信息,请参阅"设置菜单项的键等效".

  • 请注意,不推荐使用NSShiftKeyMask,NSCommandKeyMask等.而是使用NSEventModifierFlagShift,NSEventModifierFlagCommand等. (2认同)

ugh*_*fhw 11

setKeyEquivalent:方法用于指定触发命令的字符,但不指定修饰符.它将通过检查您传递的字符来设置默认修饰符.如果你传递一个小写字符,它将只使用command.如果传递大写字符,则使用shift+ command.因此,您只需要为shift+ command+ 执行此操作x:

[menuItem setKeyEquivalent:@"X"];
Run Code Online (Sandbox Code Playgroud)

如果你想使用其他的修饰,你再调用setKeyEquivalentModifierMask:与适当的常数,从选择NSShiftKeyMask,NSAlternateKeyMask(选件),NSCommandKeyMaskNSControlKeyMask.