0

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

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 中看到它。

当我按下键盘上的按钮时,我会在控制台中看到“栏”。当我单击鼠标时,我什么也看不到。单击鼠标后,将不再注册任何键事件。

我错过了什么?为什么鼠标事件会偷走响应者链,它要去哪里?

4

1 回答 1

0

就像@Willeke 提到的那样,第一响应者可能通过鼠标单击而改变。

您可以像这样在鼠标按下时设置第一响应者:

override func mouseDown(theEvent: NSEvent) {
     self.view.window.makeFirstResponder(self)
}

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

于 2016-04-25T08:15:56.550 回答