如何在接收点击事件的同时使 OS X 应用程序无法聚焦?

How can I make an OS X application unfocusable while still receiving click events?

我正在为 OS X 开发屏幕键盘应用程序,类似于操作系统内置的应用程序(键盘查看器)。我似乎碰壁了,因为我不确定如何接受来自按钮的点击事件,而不是从当前激活的应用程序中窃取焦点。我知道这是可能的,因为已经有一些应用程序可以做到这一点,例如AssistiveWere 的 KeyStrokes。

所以我的问题是:如何让我的 window 接收鼠标事件并在不激活的情况下处理它们?

P.S。我在 OS X 开发方面不是很有经验,这是我的第一个 Swift 项目,如果这是一个微不足道的问题,请原谅。

您需要使 window 成为 NSPanel(或子类)的实例,在其 styleMask 中包含 NSNonactivatingPanelMask,并设置 becomesKeyOnlyIfNeeded为真。 (样式掩码可以在 IB 中控制。)您可能还希望它浮动,因此它总是高于正常 windows,因此也将 floatingPanel 设置为 true。