macos - 为什么我按 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
对应120
于F2
.
所以我根本不需要做这个测试来测试功能键F1到F12。
最大的问题是:这样做的目的是什么.function
。这是什么测试?
我想到fn
了 mac 键盘上的键,但这些键无法检测到,当我按 F1 到 F12 中的任何键时,此方法为我提供了键的键码加上此功能为真。
我的意思是:例如,当我按下 F2 时,我收到event.keycode
,这意味着按下 F2 并且functionKey
(63) 为真?为什么要冗余?
解决方案
Apple 的文档与以往不同。
如果文档没有帮助,请检查标题。从 NSEvents.h 复制:
NSEventModifierFlagFunction = 1 << 23, // Set if any function key is pressed.
NSEventModifierFlagFunction
是NSFunctionKeyMask
,文档:
NSFunctionKeyMask
设置是否按下任何功能键。功能键包括大多数键盘顶部的 F 键(F1、F2 等)和大多数键盘中间的导航键(Help、Forward Delete、Home、End、Page Up、Page Down 和方向键)。
显然,.function
按下 fn 键时也会设置标志(在我的 Apple 键盘上,我的 Logitech 键盘在内部处理 fn 键)。
推荐阅读
- python - pygame.MOUSEBUTTONDOWN 未注册
- mysql - System.InvalidOperationException 加载 mySQL 信息
- javascript - 如何在 redux 辅助函数中引用反应组件的状态
- python - pygame 的主循环不起作用,pygame 立即退出
- javascript - 为什么 componentDidMount 中的这个异步调用会影响组件挂载的时间?
- java - 这一行交换了两个变量,但它是怎么做的呢?
- solr - Solr 中的版本控制
- javascript - 为什么在这条线上没有任何东西记录到控制台,但它周围的一切都有效?
- java - JButton 的位置与其 JPanel 不同
- .net - .Net 核心服务写入错误的事件日志