Получение информации о том, когда NSStatusItem скрыт

#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 — этот ответ хуже, чем бесполезный, он заставил меня тратить свое время, пытаясь заставить его работать.