Mac OSX NSStatusItem具有自定义NSMenu / MenuItems和拖放功能

时间:2013-02-05 12:16:00

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

我正在尝试创建一个在状态栏中具有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");
}

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

但是现在我不知道如何在点击状态栏图标时显示菜单。

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

此致

Shumais

1 个答案:

答案 0 :(得分:4)

经过多天的热播和试用,寻找合适的教程并且碰到我的脑袋无济于事,我终于偶然发现了一个慷慨地在github上为公众提供的imgur应用程序代码库。

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

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

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

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

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

谢谢

Shumais