首页 > 解决方案 > 为什么在 MacOS Cocoa App 中接收鼠标事件之前需要点击?

问题描述

我希望我的 Mac 应用程序打开它的主窗口,并在任何鼠标移动时退出。

它可以工作,只是我需要先单击窗口,然后移动鼠标才能退出我的应用程序。

为了构建这个简单的应用程序,我使用了 Xcode 和带有“Use Storyboards”的“Cocoa Mac”内置项目,然后在我的 中ViewController.swift,我编辑如下:

override func viewDidLoad() {
    super.viewDidLoad()
    NSEvent.addGlobalMonitorForEvents(matching: .mouseMoved) { event in
        NSApplication.shared.terminate(self);
    }
}

我在想这可能是先集中注意力的问题?但是,当应用程序启动时,在我看来它已经将焦点放在了它的主窗口上。

有什么想法我在哪里做错了吗?


我最后的愿望是让应用程序全屏显示,并且它可以工作,添加如下一行。问题是,进入全屏模式后,“MouseMoved 事件”不再响应,即使我在窗口内单击:

override func viewDidLoad() {
    super.viewDidLoad()

    view.enterFullScreenMode(NSScreen.main!, withOptions: nil)

    NSEvent.addGlobalMonitorForEvents(matching: .mouseMoved) { event in
        NSApplication.shared.terminate(self);
    }
}

更新(2018 年 12 月 17 日):

作为对我的票的更新,我最终选择在 keyDown 事件(而不是 mouseMoved 事件)上退出我的应用程序,我是这样处理的:

class ViewController: NSViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        override func keyDown(with event: NSEvent) {
            NSApplication.shared.terminate(self);
        }

        ...

    }

    ...

}

(而且它与全屏模式兼容,这很好。)

标签: swiftxcodemacoscocoa

解决方案


推荐阅读