Cocoa:设置键盘快捷键

21
我想设置菜单项的按键等效性,用[menuitem setKeyEquivalent:(NSString *)s]方法,但是如果我有多个修饰符,我该怎么办?
我尝试过:
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];

但那样不起作用。


有没有办法将F1设置为键等效键?谢谢 - Ben
5个回答

31

修改键掩码只是掩码,不是字符。您无法将它们插入到键等效字符串中。要应用它们,请使用setKeyEquivalentModifierMask:

[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask];
[menuItem setKeyEquivalent:@"x"];

与其他掩码一样,使用按位或运算符|来形成组合。有关更多详细信息,请参见"设置菜单项的键等效项"

3
请注意,NSShiftKeyMask、NSCommandKeyMask等已被弃用。相反,请使用NSEventModifierFlagShift、NSEventModifierFlagCommand等。 - Nathan F.

15

setKeyEquivalent:方法用于指定触发命令的字符,但不包括修饰键。它会通过检查你传递的字符来设置默认的修饰键。如果你传递一个小写字符,它将只使用command。如果你传递一个大写字符,它将使用shift+command。因此,你只需这样做来设置shift+command+x:

[menuItem setKeyEquivalent:@"X"];

如果你想使用其他的修饰键,那么你需要调用setKeyEquivalentModifierMask:方法,并传入来自NSShiftKeyMaskNSAlternateKeyMask(选项)、NSCommandKeyMaskNSControlKeyMask等常量中选择的正确常量。


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

2

Swift 5示例:

item.keyEquivalent = "q"
item.keyEquivalentModifierMask = [.command]

item.keyEquivalentModifierMask = .option.union(.command) - Soid

2

Swift 3.0示例:

item.keyEquivalent = "x"
item.keyEquivalentModifierMask = [NSAlternateKeyMask, NSCommandKeyMask]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接