【问题标题】:Cocoa: setting the key equivalentCocoa:设置等效键
【发布时间】: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 设置为等效键?谢谢

标签: objective-c cocoa key menuitem hotkeys


【解决方案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]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-30
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多