macOS - 如果应用程序未激活,菜单操作不会触发任何操作
macOS - Menu actions do not trigger any action if the app is not active
我正在构建这个将位于菜单栏上的应用程序。
因此,与此类应用程序的通常做法一样,您将 statusItem 菜单调整为您的应用程序的菜单。
该菜单上的项目触发第一响应者的操作,在我的例子中是该应用程序的 viewController。
这就是问题所在:如果应用程序处于活动状态,则此方法有效,但如果应用程序未处于活动状态或隐藏状态,则会失败。我猜菜单项触发的操作会触发响应链,但没有人在听,因为应用程序已隐藏或未激活。
遇到这种情况我该怎么办?我应该创建一个单例并将该单例添加到响应者链吗?我说单例是因为它总是会加载到内存中。这个单例是否必须是某些特殊 class 的子 class?
如果此菜单中的操作应触发 viewController 中的内容怎么办?
您应该能够在 AppDelegate 中处理第一响应者,如果应用程序未处于活动状态,这应该会起作用。
先见NSEvent.addGlobalMonitorForEvents(matching:handler:)
并注意讨论:
Key-related events may only be monitored if accessibility is enabled or if your application is trusted for accessibility access (see AXIsProcessTrusted()
).
我正在构建这个将位于菜单栏上的应用程序。
因此,与此类应用程序的通常做法一样,您将 statusItem 菜单调整为您的应用程序的菜单。
该菜单上的项目触发第一响应者的操作,在我的例子中是该应用程序的 viewController。
这就是问题所在:如果应用程序处于活动状态,则此方法有效,但如果应用程序未处于活动状态或隐藏状态,则会失败。我猜菜单项触发的操作会触发响应链,但没有人在听,因为应用程序已隐藏或未激活。
遇到这种情况我该怎么办?我应该创建一个单例并将该单例添加到响应者链吗?我说单例是因为它总是会加载到内存中。这个单例是否必须是某些特殊 class 的子 class?
如果此菜单中的操作应触发 viewController 中的内容怎么办?
您应该能够在 AppDelegate 中处理第一响应者,如果应用程序未处于活动状态,这应该会起作用。
先见NSEvent.addGlobalMonitorForEvents(matching:handler:)
并注意讨论:
Key-related events may only be monitored if accessibility is enabled or if your application is trusted for accessibility access (see
AXIsProcessTrusted()
).