我可以以编程方式打开 NSMenu 吗?

Posted

技术标签:

【中文标题】我可以以编程方式打开 NSMenu 吗?【英文标题】:Can I open an NSMenu programatically? 【发布时间】:2015-08-17 11:46:15 【问题描述】:

正如标题所说,我想以一定的时间间隔自动打开菜单。最好从程序本身内部进行,因为我确信我可以使用我不想使用的 applescripts+cron 手动执行某些操作。

我说的是 OSX 菜单栏中的菜单/按钮/任何内容。只是要清楚。没有自定义视图,只有一个普通的 nsmenu。

【问题讨论】:

【参考方案1】:

为了打开 NSStatusItem 菜单,我发现在属于 NSStatusItem 的按钮上调用 performClick 方法更容易。这样我就不必担心正确地将事件或视图传递给popUpContextMenu。像这样的:

statusItem.button?.performClick(nil)

【讨论】:

看起来像这样:statusItem.button?.performClick(nil)【参考方案2】:

您可以通过调用以编程方式显示NSMenu

[NSMenu popUpContextMenu:YOUR_MENU withEvent:MOUSE_EVENT forView:YOUR_VIEW]

要构造事件,您可以使用NSEvent's +mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:

注意:如果您的菜单是NSStatusItem 菜单,您必须设置项目的视图才能弹出菜单。

【讨论】:

以上是关于我可以以编程方式打开 NSMenu 吗?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建带有 NSMenuItems 的 NSMenu?

如何以编程方式添加 NSMenu?

我可以通过代码以编程方式打开位置服务吗

您可以以编程方式打开“以不同用户身份运行”对话框吗?

我可以通过 Google Chrome 扩展程序以编程方式打开 devtools 吗?

我们可以以编程方式从我们的应用程序打开/关闭 hdmi 设置吗