无法在自定义 NSViewController 中注册鼠标事件


这是我

的代码,为简洁起见进行了简化:

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)
}

现在,您应该能够接收所有事件。

最新更新