#objective-c #macos #cocoa #appkit #nsstatusitem
#objective-c #macos #какао #appkit #nsstatusitem
Вопрос:
У меня есть приложение, которое использует NSStatusItem
. На маленьких экранах в строке состояния не так много места. Когда пользователь переключается на приложение с большим количеством пунктов меню, мой элемент статуса становится скрытым. Есть ли способ получить уведомление об этом?
Что я пробовал до сих пор:
- Я проверил, запущен ли какой
NSNotification
-либо: нет - Я проверил
statusView
, удален ли объект из иерархии представлений: нет - Я проверил
isHiddenOrHasHiddenAncestor
: нет
Вот код, который я использую для создания элемента состояния.
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
MyStatusView *maView = [[[MyStatusView alloc] initWithFrame:CGRectMake(0, 0, 50, 22)] autorelease];
[statusItem setTitle:@"Ma Status Item"];
[statusItem setView:maView];
Комментарии:
1. можете ли вы проверить, изменяется ли его свойство view.center при перемещении с экрана? Возможно, вы сможете добавить уведомление KVO в свойство center, чтобы установить своего рода обратный вызов, но я не знаю, будет ли это работать для StatusItem.
2. У меня также запущен таймер, который регистрирует границы относительно окна. Не меняется… Похоже, что maaview находится в своем собственном окне (NSWindow> NSNextStepFrame> Maaview). Попытается посмотреть, перемещено ли это за пределы экрана.
3. Границы окна также все еще отображаются на экране. Окно может быть перекрыто чем-то другим. Хотя я не знаю, как это проверить..
4. Я понял, что элемент статуса скрыт, переместив его окно в фоновый режим. Я запустил таймер, который проверяет окна поверх maaview.window следующим образом gist.github.com/1282781 . Теперь кто-нибудь скажет мне, есть ли уведомление, когда окно перемещается в фоновый режим.
5. @stigi вы в конечном итоге заставили это работать? Кажется, я не могу получить список уведомлений dragoncharmer для запуска.
Ответ №1:
С вашей стороны довольно умно понимать, что когда элемент состояния скрыт, его окно будет перемещено в фоновый режим.
Теперь уведомление, которое вы ищете, это: NSWindowDidResignKeyNotification (или NSWindowDidResignMainNotification в зависимости от контекста вашего приложения)
Для четкого объяснения разницы между ключевым окном и главным окном см. Это.
Комментарии:
1. Этот ответ не работает, -1, уведомления такого рода не отправляются, когда NSStatusItem скрыт
2. -1: Я второй @Vervious — этот ответ хуже, чем бесполезный, он заставил меня тратить свое время, пытаясь заставить его работать.