【问题标题】:Mac OSX NSStatusItem with Custom NSMenu/MenuItems AND Drag And Drop functionality具有自定义 NSMenu/MenuItems 和拖放功能的 Mac OSX NSStatusItem
【发布时间】:2013-02-05 12:16:00
【问题描述】:

我正在尝试创建一个在状态栏中具有 NSStatusItem 图标的 Mac 应用程序。状态栏图标应支持文件拖放,并且在单击时还必须显示菜单。

问题是我已经设法分别实现这两个功能并且很难将它们合并在一起。

我能够使用此链接创建状态栏应用程序:

http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/

然后我可以使用以下链接在状态栏图标上实现拖放功能

Drag and Drop with NSStatusItem

我面临的问题如下,为了获得拖放,我必须创建另一个视图,然后将该视图分配给 NSStatusItem,如下所示:

NSStatusItem *statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];

ViewWithDragFunctionality* viewWithDrag = [[ViewWithDragFunctionality alloc] initWithFrame:NSMakeRect(0, 0, 24, 24)];
[statusItem.view addSubview:viewWithDrag];

由于这只是一个视图,它显然不能作为 NSStatusItem 的默认视图,并且不支持鼠标交互或其他任何东西。 我设法通过将以下函数添加到 ViewWithDragFunctionality.m

来解决这个问题
- (void)mouseDown:(NSEvent *)theEvent {
    NSLog(@"Status Bar Icon Clicked");
}

只要点击状态栏图标并且检测到文件拖放,就会调用该函数。

但是现在我一直在弄清楚如何在单击状态栏图标时显示菜单。

任何帮助将不胜感激。我正在为此制定解决方案,如果我先找到一些东西,我会在这里发布:)

问候

舒迈

【问题讨论】:

    标签: macos drag-and-drop nsmenuitem nsmenu nsstatusitem


    【解决方案1】:

    经过多日的摸索和尝试,寻找合适的教程,摸了摸头也无济于事,我终于偶然发现了一个 imgur 应用程序代码库,该代码库慷慨地托管在 github 上,供公众使用。

    代码由名为 ZBUC 的用户托管在 gihthub。

    帮助我的代码位于 github 上的以下存储库位置:https://github.com/zbuc/imgurBar

    这正是所需要的,在研究了他/他们如何在那里做事并将我学到/发现的内容与问题中提到的链接相结合之后,我能够为我的应用程序创建一个自定义状态菜单项,是能够像默认状态菜单项一样获得适当的下拉菜单,并且还能够向我的应用程序状态菜单项添加拖放功能。

    所以现在我的应用程序有一个自定义状态菜单,它的工作方式类似于普通状态菜单,还支持拖放功能。

    我希望问题中的链接以及上面发布的存储库链接对所有需要我所做的事情的人有所帮助。

    谢谢

    舒迈

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2021-03-12
      相关资源
      最近更新 更多