swift 3 (macOS) : keyDown(with event: NSEvent) doesn't get called

标签 swift xcode macos swift3

我正在尝试用 Swift 3 编写一个简单的程序,每次用户按下箭头键时我都需要执行一个操作。经过一番研究,我发现我需要使用的方法是 keyDown(with event: NSEvent) ;问题是每当我按下任何键时它都不会被调用。

这是我的代码

import Cocoa

let LEFT: UInt16  = 123
let RIGHT: UInt16  = 124
let DOWN: UInt16  = 125
let UP: UInt16  = 126

class GameViewController: NSViewController {

...

  override func keyDown(with event: NSEvent) {
          print("abc")
          switch event.keyCode {
          case LEFT:
              print("left")
              break
          case RIGHT:
              print("right")
              break
          case DOWN:
              print("down")
              break
          case UP:
              print("up")
              break
          default:
              print("other")
              super.keyDown(with: event)
              break
          }
          print("Key with number: \(event.keyCode) was pressed")
      }
}

我尝试按下所有箭头键和其他键来测试我的箭头键是否有问题,但没有任何反应 - 除了我从 macOS 听到错误声音。

我不知道问题出在哪里 - 我是 Swift 的新手,所以它可能是我没有看到的非常明显的东西。你们知道我做错了什么吗?

提前致谢

最佳答案

我注意到您已经在 View Controller 的代码中实现了 keyDown 方法。这实际上是不正确的地方——该方法应该放在 View 的代码中,而不是 View Controller 。如果您当前没有使用自定义 View (您可以修改代码),那么您应该创建一个新的子类。

关于 swift 3 (macOS) : keyDown(with event: NSEvent) doesn't get called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41321057/

相关文章:

swift - 在 TableView 中移动单元格

objective-c - Firebase,无法查询数组

swift - 当歌曲 slider 按住时间过长时,positionSlider.value太大

macos - 绕过图形管理员密码打开 OSX 应用程序命令行解决方案

macos - Swift2:初始化 UnsafeMutablePointer<Unmanaged<CFMutableDictionary>?> 参数以传递给 IORegistryEntryCreateCFProperties 的正确方法

Swift - 在应用程序委托(delegate)中访问不同的 View Controller

cocoa - 为什么 Swift 中的这段代码会在 NSTableView 上产生一个空行?

android - -bash : android: command not found on Mac OSX

c++ - 未定义的内部链接和 undefined symbol 错误

ios - 如何在不触摸按钮的情况下更改按钮的图像