如何在Swift中检查Shift键是否被按下?

3

我想检查在函数运行时是否按下了Shift键。类似于以下代码(但显然不是这个,这只是一个例子):

func doThisThing() {
    if Keyboard.shared.keyBeingPressed(.shift) { // < What I'm trying to figure out
        print("Doing this thing.")
    } else {
        print("You're not holding shift.")
    }
}

我试着查找,但我找到的只有keyDown/keyUp事件,这在这种情况下并不实用。


1
据我所知,在SwiftUI中根本不需要做这样的命令式事情...或者你实际上是在使用AppKit,[tag:swiftui]只是一个错误的标签吗? - Sweeper
如果您正在使用AppKit,请参见https://dev59.com/jWox5IYBdhLWcg3wVS8J#14774656。 - Sweeper
我所能找到的只有keyDown/keyUp事件,但在这种情况下并不实用。它们为什么不实用? - Alexander
维护keyDown -> Up的状态并不实用。在AppKit中,您可以在视图控制器中覆盖flagsChanged方法,它会为您执行状态管理。但我不知道如何在SwiftUI中实现这一点。 - hayesk
2个回答

3
import AppKit

public class KeyboardHelper
{
    public static var optionKeyIsDown: Bool
    {
        let flags = NSEvent.modifierFlags
        return flags.contains(.option)
    }

    public static var shiftKeyIsDown: Bool
    {
        let flags = NSEvent.modifierFlags
        return flags.contains(.shift)
    }
}

0

我已经很久没有做这种事情了,但我似乎记得你需要设置一个NSResponder并监视keyDown/keyUp事件。然后,您将解析事件以查找按下或释放Shift键。

看起来还有一个函数flagsChanged,您可以实现它以在修改键之一更改状态时收到通知。请参见此SO线程:

如何检测Shift键是否已被按下?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接