可可:设置密钥等价物

时间:2011-06-03 16:21:29

标签: objective-c cocoa key menuitem hotkeys

我想用[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];

但这不起作用。

5 个答案:

答案 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]