为什么在按F1,F2等时选择此功能键?

时间:2019-08-12 19:39:06

标签: macos cocoa keydown nstextfield nsevent

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

如果intersection.contains(.function)

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

因此,我完全不需要进行此测试即可测试功能键F1至F12。

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

我想到了Mac键盘上的fn键,但是这些键是无法检测到的,当我按F1到F12中的任何键时,此方法为我提供了该键的键代码以及此功能为true。

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

1 个答案:

答案 0 :(得分:2)

Apple的文档已不再是以前的文档。

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

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

NSEventModifierFlagFunctionNSFunctionKeyMask,文档:

  

NSFunctionKeyMask

     

设置是否按下任何功能键。功能键包括大多数键盘顶部的F键(F1,F2等)和大多数键盘中央的导航键(帮助,前进删除,首页,结束,上一页,下一页和箭头键)。

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