我正在使用Swift编写一个简单的状态栏应用程序,并尝试使用在OS X 10.10中引入的新NSStatusItem API。
我希望实现的界面是:单击状态项左键可切换核心功能的开启和关闭,右键(或按住Control键单击)可显示设置菜单。对于此功能,我不需要自定义视图或弹出窗口。
默认情况下,如果将NSMenu分配给NSStatusItem,则它将在单击左键和右键时都显示菜单。我想改变这种行为,仅在右键单击时显示菜单,或者作为解决方法,防止在左键单击时弹出菜单。
以前,似乎要控制NSStatusItem上的鼠标事件,必须设置具有覆盖鼠标事件的自定义视图(请参见this related question)。
在10.10中引入的新NSStatusItem API 中,设置自定义视图的方法已被弃用,并且这种行为似乎不被鼓励。根据@Taylor在this answer中的说法,一些已弃用的行为应该通过statusItemObject.button()返回的NSStatusBarButton对象来使用,但是截至目前为止,没有关于NSStatusBarButton的文档,并且返回的对象是只读的,无法用具有覆盖鼠标事件处理程序的自定义按钮替换它。
是否有一种方法可以控制NSMenu附加到NSStatusItem(或NSStatusBarButton)时显示与鼠标事件相关的某个级别的控件?
我希望实现的界面是:单击状态项左键可切换核心功能的开启和关闭,右键(或按住Control键单击)可显示设置菜单。对于此功能,我不需要自定义视图或弹出窗口。
默认情况下,如果将NSMenu分配给NSStatusItem,则它将在单击左键和右键时都显示菜单。我想改变这种行为,仅在右键单击时显示菜单,或者作为解决方法,防止在左键单击时弹出菜单。
以前,似乎要控制NSStatusItem上的鼠标事件,必须设置具有覆盖鼠标事件的自定义视图(请参见this related question)。
在10.10中引入的新NSStatusItem API 中,设置自定义视图的方法已被弃用,并且这种行为似乎不被鼓励。根据@Taylor在this answer中的说法,一些已弃用的行为应该通过statusItemObject.button()返回的NSStatusBarButton对象来使用,但是截至目前为止,没有关于NSStatusBarButton的文档,并且返回的对象是只读的,无法用具有覆盖鼠标事件处理程序的自定义按钮替换它。
是否有一种方法可以控制NSMenu附加到NSStatusItem(或NSStatusBarButton)时显示与鼠标事件相关的某个级别的控件?
item.highlightMode = false
来解决右键单击后仍然存在的高亮问题。b)主要操作的情况应该首先出现在最终的else块中(在self.statusItemAction = JUNStatusItemActionNone;
之前),以使所需的行为起作用。否则,您将设置self.statusItemAction
的值,然后立即检查它是否不同。 - Kieran