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:,从NSShiftKeyMaskNSAlternateKeyMask(选项)、NSCommandKeyMaskNSControlKeyMask 中选择。

【讨论】:

【参考方案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:设置等效键的主要内容,如果未能解决你的问题,请参考以下文章

测试只读属性与设置/获取密钥——obj-c / cocoa

Objective-C/Cocoa:获取关键代码

Cocoa:NSViewController 视图中的设置器

在 Swift、Cocoa、Mac OSX 中将 EXIF 数据设置为 NSImage

使用 Cocoa pod 设置 RealmSwift

如何使用 Swift 为 Cocoa 应用程序中的 NSLider 值更改设置动画