Swift OSX键盘事件

11

我一直在使用Swift开发一个Cocoa OSX项目,需要使用键盘输入来执行操作。在按下键时,我想将一个对象移动到窗口中,但是当松开键时,停止该对象的移动。我查阅了AppKit文档,找到了KeyDown函数,但似乎无法弄清楚如何使用它。我想创建一个函数,在我的游戏更新计时器中调用,以执行此操作。谢谢

import Cocoa
import Appkit

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet weak var window: NSWindow!

func applicationDidFinishLaunching(aNotification: NSNotification) {
    // Insert code here to initialize your application

     func keyDown(theEvent: NSEvent) {
        if (theEvent.keyCode == 1){
            println("test")
        }

    }

}

func applicationWillTerminate(aNotification: NSNotification) {
    // Insert code here to tear down your application



}

}


阅读苹果指南,特别是这个:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html “处理按键事件”。在其中你也会找到示例代码。 - Jean-Baptiste Yunès
你不应该在那个类中使用那个事件。请在你的窗口类中使用它。 - Kendel
@Kendel 抱歉,但如果我只有AppDelegate,没有窗口类(它是一个菜单栏应用程序),我该把override func放在哪里? - Vincent
3个回答

25

这里是一些示例代码:

  override func keyDown(theEvent: NSEvent) {
            if (theEvent.keyCode == 1){
           //do whatever when the s key is pressed
        } 

    }

按键代码: enter image description here


当我使用那个示例代码时,编译器会报错,说它无法覆盖超类的方法。我已经导入了AppKit。在哪里可以使用上面的示例代码来接受键盘输入?谢谢。 - user4064541
我刚刚随便弄了一个测试项目,并将其添加到初始化应用程序函数中。当我按键时,如果键盘输入不被接受,我的Mac会发出“boing声” - user4064541
我以为你遇到了编译器错误?那么现在问题是什么? - Kendel
我仍然得到编译器错误。它不会使用“override”进行编译。我删除了override,然后运行它并得到了那些结果。 - user4064541
非常感谢您发布那张图片。我一直没有成功地将控制和命令键发送到某些应用程序中。我一直在使用CGEvent.flags来传递这些修饰符。直到我看到那张图片之前,我从未想过可以在修改键之前和之后单独发送修饰符(即59、55等)。 - dldnh
显示剩余3条评论

5
 override func keyDown(with event: NSEvent) {
    if (event.keyCode == 1){
        //do whatever when the s key is pressed
        print("S key pressed")
    }
}

更新适用于 SWIFT 3


2

这很棒 - 可以使用它拦截键盘输入并过滤发送到 ViewController 中的文本字段吗? - Ian33

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