gpt4 book ai didi

macos - 在 Swift 中检测按键事件

转载 作者:IT王子 更新时间:2023-10-29 05:35:02 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来检测是否在 Swift 上按下了某个键(在键盘上)。任何想法和建议将不胜感激。

最佳答案

由于您更新了问题并且想知道如何为窗​​口执行此操作,这里有一个答案。子类化 NSWindow 并改用这个子类。

您的自定义类应如下所示:

import Cocoa

class EditorWindow: NSWindow {
override func keyDown(event: NSEvent) {
super.keyDown(event)
Swift.print("Caught a key down: \(event.keyCode)!")
}
}

如果您在 Interface Builder/XCode 中制作了窗口,请单击窗口对象并转到属性检查器 (++3)。属性检查器将位于右侧的侧边栏中。确保在 Interface Builder 中选择了您的窗口,在属性检查器顶部的 Custom Class 区域将您的新类放入类输入中。

Attribute Selector

为了将事件从这个窗口类传递到我的应用程序,我向窗口添加了一个函数,该函数接受一个回调函数,然后将其存储在一个回调函数数组中。我通过 AppDelegate 访问这个窗口,它可以获得对当前主窗口的弱引用。然后在上面的函数中,我遍历所有回调并使用 NSEvent 作为参数调用它。我还首先检查是否首先通过事件上的 modifierFlags 属性按下了任何命令键,例如选项键。它最终看起来像这样:

import Cocoa

typealias Callback = (NSEvent) -> ()

class KeyCaptureWindow: NSWindow {

var keyEventListeners = Array<Callback>()

override func keyDown(event: NSEvent) {
if event.modifierFlags.contains(NSEventModifierFlags.CommandKeyMask) {
super.keyDown(event)
return
}
for callback in keyEventListeners {
callback(event)
}
}

func addKeyEventCallback(callback: Callback) {
keyEventListeners.append(callback)
}


}

然后在我的代码的其他地方有这样一行:

    let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
let mainWindow = appDelegate.getWindow()
mainWindow.addKeyEventCallback(handleKeyEvent)

我将 getWindow 方法添加到我的应用委托(delegate)类中。此方法返回转换为 KeyCaptureWindowNSWindow。可能有更好的方法来完成这一切,但这对我有用。另一种可能的方法是使用第一响应者和 NSView,但这不是我一直在做的。

关于macos - 在 Swift 中检测按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com