swift - 为什么在 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);
}
...
}
...
}
(而且它与全屏模式兼容,这很好。)
解决方案
推荐阅读
- sql - Oracle 查询中的条件联合
- amazon-web-services - 卓:“可以使用内容来改进服务”是什么意思?
- jsp - 如何根据用户角色显示元素?
- mysql - MySQL 分组给出 4 行而不是 1
- python - 如何使用 python 请求库发送此请求
- python - Kivy '崩溃' 没有错误消息 ['aborted (disconnected)']
- python - 了解python字典的顺序
- java - 压缩解压字符串得到的数据与原始压缩数据不一致
- python - 获取 Twisted 服务器的 IP 地址
- node.js - 如何在 AWS EC2 中为多个开发人员正确安装 nvm/node/npm?