为什么在MacOS Cocoa App中收到鼠标事件之前需要单击?

时间:2018-12-14 07:10:22

标签: swift xcode macos cocoa

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

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

要构建这个简单的应用程序,我将Xcode和内置项目“ Cocoa Mac”与“ Use Storyboards”一起使用,然后在我的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);
        }

        ...

    }

    ...

}

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

0 个答案:

没有答案