2016-10-20 6 views
0

Мое приложение для какао может открыть несколько popovers.
Если щелкнуть где-нибудь еще, открываемый в настоящее время поповер закроется (нормальное поведение)Есть ли способ программно закрыть все открытые NSPopovers на ключевом событии вместо события мыши?

Однако, мы также горячая клавиша, которая изменяет состояние приложения, и мы хотели бы, чтобы Popovers закрыть, подобно тому, как событие мыши закроет его.

Некоторые из Popovers имеет текстовые поля для ввода данных пользователя, и я не хочу просто переопределить мой класс поповера для прослушивания этой конкретная горячей клавиши, чтобы закрыть, но это только идея, я прямо сейчас

ответ

0

Нашел интересное решение, которое на самом деле довольно безопасно, насколько это касается состояния приложения.

Я траверс Ответчик цепи, ища NSPopover, и если я найду один, я прохожу -cancelOperation сообщений (которое посылается на клавише ESC нажат)

Это безопасно закрывает мой Popovers

+ NSWindowController* windowController = [MyMainWindowController sharedWindowController]; 
+ NSResponder *responder = [[windowController window] firstResponder]; 
+ while ((responder = [responder nextResponder])) 
+ { 
+  if([responder isKindOfClass:[NSPopover class]]) 
+  { 
+   [[windowController window] cancelOperation:nil]; 
+   break; 
+  } 
+ } 
0

одна идеи было бы отправить пользовательский номер NSNotification, когда ваше приложение изменит состояние, и каждый NSPopover должен прослушать это уведомление и закрыть его.