我的可可應用程序可以打開幾個彈出窗口。
如果你點擊其他地方,當前打開的酥料餅將關閉(正常行爲)有沒有辦法以編程方式關閉關鍵事件上的所有打開的NSPopovers,而不是鼠標事件?
然而,我們也必須改變應用程序的狀態的熱鍵,我們想關閉popovers,類似於如何鼠標事件會關閉它。
一些popovers的對用戶輸入的文本框,我不只是想覆蓋我酥料餅類偵聽這種特定的快捷鍵來關閉,但是這就是我現在所擁有的
我的可可應用程序可以打開幾個彈出窗口。
如果你點擊其他地方,當前打開的酥料餅將關閉(正常行爲)有沒有辦法以編程方式關閉關鍵事件上的所有打開的NSPopovers,而不是鼠標事件?
然而,我們也必須改變應用程序的狀態的熱鍵,我們想關閉popovers,類似於如何鼠標事件會關閉它。
一些popovers的對用戶輸入的文本框,我不只是想覆蓋我酥料餅類偵聽這種特定的快捷鍵來關閉,但是這就是我現在所擁有的
想出了一個有趣的解決方案,就應用程序狀態而言,它實際上非常安全。
我遍歷響應鏈,尋找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;
+ }
+ }
一個想法唯一的想法將在應用程序更改狀態時發送自定義NSNotification
,並讓每個NSPopover
監聽該通知並關閉自身。