首页 > 解决方案 > 为什么我按 F1、F2 等时选择了这个功能键?

问题描述

我正在阅读在 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

}

将评估为真

if intersection.contains(.function)

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

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

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

我想到fn了 mac 键盘上的键,但这些键无法检测到,当我按 F1 到 F12 中的任何键时,此方法为我提供了键的键码加上此功能为真。

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

标签: macoscocoakeydownnstextfieldnsevent

解决方案


Apple 的文档与以往不同。

如果文档没有帮助,请检查标题。从 NSEvents.h 复制:

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

NSEventModifierFlagFunctionNSFunctionKeyMask,文档:

NSFunctionKeyMask

设置是否按下任何功能键。功能键包括大多数键盘顶部的 F 键(F1、F2 等)和大多数键盘中间的导航键(Help、Forward Delete、Home、End、Page Up、Page Down 和方向键)。

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


推荐阅读