【发布时间】:2015-06-09 05:37:45
【问题描述】:
我正在尝试使用 Swift 和 Cocoa 为 OS X 创建一个应用程序。我希望应用程序响应关键事件,而不会将焦点放在文本字段上。我在 Xcode 中创建了一个带有故事板的新 Cocoa 项目,并将 ViewController.swift 类修改为以下内容:
import Cocoa
class ViewController: NSViewController {
override func mouseDown(theEvent: NSEvent) {
println( "Mouse Clicked" )
}
override func keyDown(theEvent: NSEvent) {
println( "Key Pressed" )
}
override func viewDidLoad() {
super.viewDidLoad()
}
override var representedObject: AnyObject? {
didSet {
}
}
}
当我运行程序时,单击窗口时会得到控制台输出,但按任意键时不会得到任何控制台输出。
所以我的问题是:为什么我的程序响应鼠标事件而不响应按键事件?我需要执行哪些额外步骤才能使键事件像鼠标事件一样工作?
看来我的视图控制器在响应者链中,因为它拦截了鼠标事件,所以这似乎不是问题。我在 SE 上找到了其他答案,说我需要继承 NSView 或 NSWindow 类。不这样做是否可以获取关键事件?
提前致谢。
编辑:除了接受的答案之外,Swift - Capture keydown from NSViewController 是一个很棒的、清晰的解决方案。
【问题讨论】:
-
您能否提供您的代码来继承 NSView?我需要做同样的事情,我相信。我正在尝试按下箭头键。
-
这个问题的最佳答案在这里:stackoverflow.com/questions/32446978/…我发布这个是因为给出的例子都没有真正帮助我,我在上面的帖子中得到了一个非常简单的答案,即使在Xcode 8 和 Swift 3。
-
@jvarela 这是一个很好的链接。谢谢。我会更新我的问题以链接到它。
标签: cocoa