2016-10-20 10 views
0

내 Cocoa 애플리케이션에 여러 개의 팝업이있을 수 있습니다.
다른 곳을 클릭하면 현재 열려있는 팝업이 닫힙니다 (정상적인 동작)마우스 이벤트 대신 키 이벤트에서 열려있는 모든 NSPopovers를 프로그래밍 방식으로 닫을 수 있습니까?

그러나 우리는 응용 프로그램의 상태를 변경하는 단축키도 가지고 있습니다. 마우스 이벤트로 닫을 수 있습니다.

popovers의 일부

는 사용자 입력 텍스트 필드가 있고, 난 그냥이 특정 단축키를 닫으을 수신하도록 내 팝 오버 클래스를 무시하고 싶지 않아,하지만 그건 내가 지금

답변

0

응용 프로그램 상태가 될 때까지 실제로 매우 안전 한 흥미로운 솔루션이 생겼습니다.

나는 NSPopover을 찾고, 응답자 체인을 통과, 내가 하나를 찾을 경우, 나는

이 안전하게 닫고 내 popovers (누르면 ESC 키를 전송되는)를 -cancelOperation 메시지를 전달

+ 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은 해당 알림을 수신하고 자체를 닫을 수 있습니다.