我想用[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];
但这不起作用。
答案 0 :(得分:24)
修饰键关键掩码就是:掩码,而不是字符。您不能将它们插入到密钥等效字符串中。要应用它们,请使用setKeyEquivalentModifierMask:
[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask];
[menuItem setKeyEquivalent:@"x"];
与任何其他掩码一样,使用按位OR运算符|
来组合。有关详细信息,请参阅"Setting a Menu Item's Key Equivalent"。
答案 1 :(得分:11)
setKeyEquivalent:
方法用于指定触发命令的字符,但不指定修饰符。它将通过检查您传递的字符来设置默认修饰符。如果传递小写字符,它将只使用命令。如果传递一个大写字符,它将使用 shift + 命令。因此,你只需要为 shift + 命令 + x 执行此操作:
[menuItem setKeyEquivalent:@"X"];
如果您想使用其他修饰符,请使用从setKeyEquivalentModifierMask:
,NSShiftKeyMask
(选项),NSAlternateKeyMask
和{{中选择的适当常量调用NSCommandKeyMask
1}}。
答案 2 :(得分:4)
Swift 2.0的示例:
let key = String(utf16CodeUnits: [unichar(NSBackspaceCharacter)], count: 1) as String
item.keyEquivalentModifierMask = Int(NSEventModifierFlags.CommandKeyMask.rawValue | NSEventModifierFlags.ControlKeyMask.rawValue)
item.keyEquivalent = key
答案 3 :(得分:2)
Swift 3.0的示例:
item.keyEquivalent = "x"
item.keyEquivalentModifierMask = [NSAlternateKeyMask, NSCommandKeyMask]
答案 4 :(得分:0)
Swift 5的示例:
item.keyEquivalent = "q"
item.keyEquivalentModifierMask = [NSEvent.ModifierFlags.command]