为什么当我按 F1、F2 等时选择了这个功能键?

Why is this functionKey selected when I press F1, F2, etc?

我正在阅读在 NSTextField 中键入的键盘快捷键。

当我按例如shift + option + F2时,这个方法

class func convertToString(event:NSEvent) -> String {

var shortcut = ""

let intersection = event.modifierFlags.intersection(.deviceIndependentFlagsMask)

if intersection.contains(.control) {
  shortcut.append("^ ")
}
if intersection.contains(.option) {
  shortcut.append("⌥ ")
}
if intersection.contains(.command) {
  shortcut.append("⌘ ")
}
if intersection.contains(.shift) {
  shortcut.append("⇧ ")
}
if intersection.contains(.function) {
  shortcut.append("fn ")
}

let character = keysCodesToCharacters[event.keyCode]!
shortcut.append(character)

return shortcut

}

将为

评估 true

if intersection.contains(.function)

理论上这会测试功能键,但最奇怪的部分是 event.keycode 作为 120 对应于 F2

所以我根本不需要做这个测试来测试功能键 F1 到 F12。

最大的问题是:这个 .function 的目的是什么。这是什么测试?

我想到了 mac 键盘上的 fn 键,但是这些键是检测不到的,当我按从 F1 到 F12 的任意键时,这个方法给了我该键的键码加上此函数为真。

我的意思是:例如,当我按 F2 时,我收到 event.keycode,这意味着 F2 被按下并且 functionKey (63) 为真?为什么裁员?

Apple 的文档与过去不同。

如果文档没有帮助,请检查 header。复制自 NSEvents.h:

    NSEventModifierFlagFunction           = 1 << 23, // Set if any function key is pressed.

NSEventModifierFlagFunctionNSFunctionKeyMask,文档:

NSFunctionKeyMask

Set if any function key is pressed. The function keys include the F keys at the top of most keyboards (F1, F2, and so on) and the navigation keys in the center of most keyboards (Help, Forward Delete, Home, End, Page Up, Page Down, and the arrow keys).

显然,当按下 fn-key 时,也会设置 .function 标志(在我的 Apple 键盘上,我的 Logitech 键盘在内部处理 fn-key)。