从NSStatusItem以编程方式隐藏NSMenu

Mar*_*ino 11 macos cocoa

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

我现在遇到的问题是,当按下按钮时它会触发动作,但菜单仍然可见.我想隐藏菜单,因为操作已经处理完毕.

我搜索过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];
Run Code Online (Sandbox Code Playgroud)

Nic*_*ore 30

它在文档中并不明显,但却[menu cancelTracking]是你想要的.

cancelTracking
Dismisses the menu and ends all menu tracking.
- (void)cancelTracking
Run Code Online (Sandbox Code Playgroud)