以编程方式从 NSStatusItem 隐藏 NSMenu

发布于 2024-10-31 08:12:49 字数 858 浏览 0 评论 0原文

我有一个在系统状态栏中显示一个项目的应用程序,其中一个项目是带有 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];

I have this application that shows an item in the system's status bar, and one of the items is a custom view with a NSTextField and a NSButton. When the user clicks on the status bar item, it shows the menu, the user inputs some text and presses the button. This triggers an action that displays a window.

The problem I'm having now is, when the button is pressed it does trigger the action, but the menu remains visible. I want to hide the menu, because the action has already been processed.

I've searched through the API, but couldn't find how to do it.

Any ideas?

This is how I'm creating the menu:

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];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

桃气十足 2024-11-07 08:12:49

docs,但是 [menu cancelTracking] 就是您想要的。

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

It's not obvious in the docs, but [menu cancelTracking] is what you want.

cancelTracking
Dismisses the menu and ends all menu tracking.
- (void)cancelTracking
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文