使OSX应用程序在未聚焦时响应第一次单击鼠标

时间:2020-03-06 14:40:18  来源:igfitidea点击:

普通OSX应用程序在未聚焦时会首先单击鼠标,以首先聚焦应用程序。然后,将来的点击将由应用程序处理。 iTunes的播放/暂停按钮和Finder的行为有所不同,即使未重点对准,也会执行首次单击。我正在寻找一种方法来强制现有应用程序(Remote Desktop Connection.app)在单击时起作用,而不仅仅是关注。

解决方案

未聚焦时对第一次鼠标单击的响应称为"单击通过"。其价值正在激烈辩论,例如在这里和这里。

检查NSView的acceptsFirstMouse,这可能是我们想要的。

acceptsFirstMouse:
如果应该向接收方发送mouseDown:消息以表示初始的mouse-down事件,则子类重写此方法以返回YES,否则返回NO。

  • (BOOL)接受FirstMouse:(NSEvent *)theEvent

参数
事件
初始的鼠标按下事件,该事件必须在其窗口中的接收器上方。

讨论
接收器可以无条件返回值,也可以使用事件的位置来确定是否需要该事件。默认实现忽略theEvent并返回NO。

在子类中重写此方法,以允许实例响应点击。这允许用户单击非活动窗口中的视图,单击一次即可激活视图,而不是先单击以使窗口处于活动状态,然后单击视图。大多数视图对象都拒绝点击事件,因此该事件只是激活了窗口。但是,许多控件对象(例如NSButton和NSSlider的实例)确实接受它们,因此用户可以立即操纵控件而无需释放鼠标键。