2016-10-20 28 views
0

我的可可應用程序可以打開幾個彈出窗口。
如果你點擊其他地方,當前打開的酥料餅將關閉(正常行爲)有沒有辦法以編程方式關閉關鍵事件上的所有打開的NSPopovers,而不是鼠標事件?

然而,我們也必須改變應用程序的狀態的熱鍵,我們想關閉popovers,類似於如何鼠標事件會關閉它。

一些popovers的對用戶輸入的文本框,我不只是想覆蓋我酥料餅類偵聽這種特定的快捷鍵來關閉,但是這就是我現在所擁有的

回答

0

想出了一個有趣的解決方案,就應用程序狀態而言,它實際上非常安全。

我遍歷響應鏈,尋找NSPopover,如果我找到一個,我通過-cancelOperation消息

這種安全關閉我的popovers(這是在按下ESC鍵發送)

+ 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監聽該通知並關閉自身。

相關問題