我有这个应用程序,它在系统状态栏中显示一个项目,其中一个项目是带有NSTextField和NSButton的自定义 View 。当用户单击状态栏项目时,它显示菜单,用户输入一些文本并按下按钮。这将触发显示窗口的操作。

我现在遇到的问题是,当按下按钮时,它确实触发了操作,但是菜单仍然可见。我想隐藏菜单,因为操作已被处理。

我已经搜索了API,但是找不到如何执行此操作。

有任何想法吗?

这就是我创建菜单的方式:

NSStatusBar *bar = [NSStatusBar systemStatusBar];

self.statusItem = [bar statusItemWithLength:NSVariableStatusItemLength];
[statusItem setImage:[NSImage imageNamed:@"icon_status_bar.png"]];
[statusItem setHighlightMode:YES];

NSMenuItem *textInputItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
[textInputItem setView:myCustomView];  // created on the Nib file...

NSMenu *menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"statusBarMenuTitle", @"")];
[menu addItem:textInputItem];

[statusItem setMenu:menu];

[textInputItem release];
[menu release];

最佳答案

docs中不是很明显,但是[menu cancelTracking]是您想要的。

cancelTracking
Dismisses the menu and ends all menu tracking.
- (void)cancelTracking

09-11 05:12