如何以编程方式将功能键设置为等效键

vci*_*lli 8 macos xcode nsmenuitem

来自 NSMenuItem 类参考

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

不确定我是否理解类引用中的“使用单个字符串...”

// 这按预期工作

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

    [myMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask];

    [myMenuItem setKeyEquivalent:s];
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

// 这不像预期的那样工作

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

    [myMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask];

    [myMenuItem setKeyEquivalent:s];
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Sup*_*tar 7

Swift 3、4 和 5 中:

let f2Character: Character = Character(UnicodeScalar(NSF2FunctionKey)!)
myMenuItem.keyEquivalent = String(f2Character)
myMenuItem.keyEquivalentModifierMask = []
Run Code Online (Sandbox Code Playgroud)


vci*_*lli 5

我自己想出来的。

   unichar c = NSF2FunctionKey;

    NSString *f2 = [NSString stringWithCharacters:&c length:1];

    [mi setKeyEquivalent:f2];
    [mi setKeyEquivalentModifierMask:NSCommandKeyMask];
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明