【问题标题】:How to detect Fn key press in Swift?如何在 Swift 中检测 Fn 按键?
【发布时间】:2021-12-21 15:00:43
【问题描述】:

我想检测用户何时按下 Fn 键并执行一些任务。我尝试了以下方法,但它不起作用:

if event.keyCode == kVK_Function {
   print("fn key pressed")
}

我对左括号、右括号、斜线、字母和数字等其他键有类似的代码。对于这些,如上所示的类似代码可以正常工作,但它不适用于 Fn 键。我认为这是不同的处理方式。

【问题讨论】:

    标签: swift macos


    【解决方案1】:

    你需要检查NSEventmodifierFlags

    if event.modifierFlags.contains(.function) {
       print("fn key pressed")
    }
    

    【讨论】:

    • 这会检测 Fn 键是否处于按下状态,而不是 Fn 键按下。
    • @Willeke 没有。我写了一篇快速文章来更好地解释如何检测 Fn 键或任何修改键的按下和释放:blog.rampatra.com/how-to-detect-fn-key-press-in-swift
    • @Willeke 你是对的,但需要一个简单的状态机,它也可以做到这一点。
    • @Willeke 我不确定代码是否完全正确。当按下/释放其他修饰键时,它将检测到错误的功能键按下/释放,因为这两个将触发flagsChanged 事件。您需要保留一个布尔变量来记住最后一个 fn 键状态,并将新状态与新状态进行比较以检测 rising/falling edges
    • @RamPatra 是的,我指的是那篇博文中的 sn-p。打印语句可能具有误导性。它们本身不检测按下和释放事件(上升/下降沿),它们检测 fn 键是否当前被按下或释放。例如,如果您按住 fn,然后向上和向下发送 shift 键,则每次都会打印出 "fn key pressed",尽管一直按 fn 键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2015-11-23
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多