2016-10-20 5 views
0

私のCocoaアプリケーションはいくつかのポップオーバーを開くことができます。
他の場所をクリックすると、現在開かれているポップオーバーが閉じます(通常の動作)マウスイベントではなく、キーイベントで開いているすべてのNSPopoversをプログラムで閉じる方法はありますか?

ただし、アプリケーションの状態を変更するホットキーもあります。ポップオーバーを閉じるには、マウスイベントはそれを閉じます。

popoversのいくつかのいずれかのアイデアをユーザー入力のためのテキストフィールドを持っている、と私はちょうど閉じるために、この特定のホットキーをリッスンするために、私のポップオーバーのクラスをオーバーライドする必要はありませんが、それは私が持っている唯一のアイデアだ今

答えて

0

アプリケーションの状態になるまでは、実際にはかなり安全な面白い解決策があります。

私はNSPopoverを探して、レスポンダチェーンを横断して、私は1つを見つけた場合、私は(押しESCキーに送信されます)-cancelOperationメッセージ

を渡すこれが安全に私の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がその通知をリッスンしてそれ自身を閉じるようにします。

関連する問題