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

Posted

技术标签:

【中文标题】无法在自定义 NSViewController 中注册鼠标事件【英文标题】:Unable to get mouse events to register in custom NSViewController 【发布时间】:2016-03-13 04:23:38 【问题描述】:

这是我的代码,为了简洁而简化:

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

当我按下键盘上的按钮时,我会在控制台中看到“栏”。当我单击鼠标时,我什么也看不到。一旦我单击鼠标,就不会再注册其他按键事件了。

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

【问题讨论】:

鼠标点击可以改变第一响应者。做一些阅读:Overview of Mouse Events 【参考方案1】:

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

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

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

现在您应该可以接收所有事件了。

【讨论】:

以上是关于无法在自定义 NSViewController 中注册鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

NSViewController 没有被创建

OpenCV 无法在自定义目录中编译

无法在自定义 UITableViewCell 中更新 UITextView 的文本

无法在自定义 TableViewCell 中编辑 UITextView

Elastic Beanstalk 无法在自定义 VPC 和子网中启动

将 NSViewController 与自定义视图一起使用