我正在尝试使用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 {
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,当我点击窗口时我得到控制台输出,但是当我按任意键时我没有得到任何控制台输出.
所以我的问题是:为什么我的程序会响应鼠标事件而不是关键事件?我需要做些什么额外的步骤才能使关键事件像鼠标事件一样工作?
我的视图控制器似乎在响应器链中,因为它拦截了鼠标事件,所以这似乎不是问题所在.我在SE上找到了其他答案,说我需要继承NSView或NSWindow类.是否有可能在不这样做的情况下获得关键事件?
提前致谢.
编辑:除了接受的答案,从NSViewController Swift - Capture keydown是一个伟大,明确的解决方案.
cocoa ×1