Cocoa:设置等效键
Posted
技术标签:
【中文标题】Cocoa:设置等效键【英文标题】:Cocoa: setting the key equivalent 【发布时间】:2011-09-07 23:03:53 【问题描述】:我想用 [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 设置为等效键?谢谢 【参考方案1】:setKeyEquivalent:
方法用于指定触发命令的字符,而不是修饰符。它将通过检查您传递的字符来设置默认修饰符。如果您传递一个小写字符,它将只使用 command。如果您传递一个大写字符,它将使用 shift+command。因此,您只需对 shift+command+x 执行此操作:
[menuItem setKeyEquivalent:@"X"];
如果您想使用其他修饰符,请使用适当的常量调用setKeyEquivalentModifierMask:
,从NSShiftKeyMask
、NSAlternateKeyMask
(选项)、NSCommandKeyMask
和NSControlKeyMask
中选择。
【讨论】:
【参考方案2】:修饰键掩码就是:掩码,而不是字符。您不能将它们插入到密钥等效字符串中。要应用它们,请使用setKeyEquivalentModifierMask:
[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask];
[menuItem setKeyEquivalent:@"x"];
与任何其他掩码一样,使用按位或运算符|
形成组合。详情请见"Setting a Menu Item's Key Equivalent"。
【讨论】:
请注意,NSShiftKeyMask、NSCommandKeyMask 等已被弃用。而是使用 NSEventModifierFlagShift、NSEventModifierFlagCommand 等。【参考方案3】: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
【讨论】:
【参考方案4】:Swift 3.0 示例:
item.keyEquivalent = "x"
item.keyEquivalentModifierMask = [NSAlternateKeyMask, NSCommandKeyMask]
【讨论】:
【参考方案5】:Swift 5 示例:
item.keyEquivalent = "q"
item.keyEquivalentModifierMask = [.command]
【讨论】:
以上是关于Cocoa:设置等效键的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa:NSViewController 视图中的设置器