【问题标题】:How to set function keys as key equivalents programmatically如何以编程方式将功能键设置为等效键
【发布时间】:2013-08-22 16:18:18
【问题描述】:

来自 NSMenuItem 类参考

如果要将 Backspace 键指定为菜单项的等效键,请使用单个字符串和 NSBackspaceCharacter(在 NSText.h 中定义为 0x08),对于 Forward Delete 键,使用 NSDeleteCharacter(在 NSText.h 中定义)。 h 为 0x7F)。

不确定我是否理解 “使用单个字符串...” 来自类 ref。

// 这按预期工作

NSString *s = [NSString stringWithFormat:@"%c",NSDeleteCharacter];

    [myMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask];

    [myMenuItem setKeyEquivalent:s];

// 这并没有按预期工作

NSString *s = [NSString stringWithFormat:@"%c",NSF2FunctionKey];

    [myMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask];

    [myMenuItem setKeyEquivalent:s];

【问题讨论】:

    标签: xcode macos nsmenuitem


    【解决方案1】:

    我自己想出来的。

       unichar c = NSF2FunctionKey;
    
        NSString *f2 = [NSString stringWithCharacters:&c length:1];
    
        [mi setKeyEquivalent:f2];
        [mi setKeyEquivalentModifierMask:NSCommandKeyMask];
    

    【讨论】:

      【解决方案2】:

      Swift 2.0 示例:

      let key = String(utf16CodeUnits: [unichar(NSBackspaceCharacter)], count: 1) as String
      menuItem.keyEquivalentModifierMask = Int(NSEventModifierFlags.CommandKeyMask.rawValue)
      menuItem.keyEquivalent = key
      

      【讨论】:

        【解决方案3】:

        Swift 3、4 和 5 中:

        let f2Character: Character = Character(UnicodeScalar(NSF2FunctionKey)!)
        myMenuItem.keyEquivalent = String(f2Character)
        myMenuItem.keyEquivalentModifierMask = []
        

        【讨论】:

          猜你喜欢
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          • 2011-09-12
          • 1970-01-01
          • 2011-01-02
          • 2011-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多