这是我
的代码,为简洁起见进行了简化:
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var fooController: FooController!
func applicationDidFinishLaunching(aNotification: NSNotification) {
self.fooController = FooController(frame: self.window.frame)
self.window.contentViewController = self.fooController
self.window.makeFirstResponder(self.fooController)
}
}
class FooController: NSViewController {
override func mouseUp(theEvent: NSEvent) {
print("foo")
}
override func keyUp(theEvent: NSEvent) {
print("bar")
}
}
我的MainMenu.xib
有一个窗口,您可以在 AppDelegate 中看到上面引用的窗口。
当我按下键盘上的按钮时,我在控制台中看到"bar"。当我点击鼠标时,我什么也没看到。单击鼠标后,不会再注册任何关键事件。
我错过了什么?为什么鼠标事件会窃取响应者链,它去哪里了?
就像@Willeke提到的,第一个响应者可能是通过鼠标单击更改的。
您可以像这样在鼠标下设置第一个响应者:
override func mouseDown(theEvent: NSEvent) {
self.view.window.makeFirstResponder(self)
}
现在,您应该能够接收所有事件。