Скрыть NSMenu программно из NSStatusItem - PullRequest
11 голосов
/ 11 апреля 2011

У меня есть это приложение, которое показывает элемент в строке состояния системы, и одним из элементов является пользовательское представление с 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];

1 Ответ

27 голосов
/ 11 апреля 2011

Это не очевидно в документах , но [menu cancelTracking] - это то, что вы хотите.

cancelTracking
Dismisses the menu and ends all menu tracking.
- (void)cancelTracking
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...