2012-01-13 2 views
0

MAC OS X 10.7에서 Apple은 NSPopover라는 새로운 클래스를 도입했으며이 팝 오버 뷰를 드래그하여 독립적 인 NSWindow가 될 수도 있습니다. 그러나 분리 된 창이 닫힐 때까지 주 창에 대한 사용자 상호 작용을 방지하려고합니다. 어떻게 안전하게 할 수 있습니까?NSPopover의 분리 창을 모달 창으로 만드는 방법

사실 현재의 프런트 윈도우가 돌아올 때까지 사용자 상호 작용을 방지하는 방법은 더 일반적인 (더 바보 같은) 질문일까요? 나는 프로그래밍을 밟을 수있는 멍청하다.

+0

실제로 주제는 분리 된 창을 모달 창으로 설정하는 것입니다. – schen

답변

1

나는 해결책을 직접 찾았습니다. 지금은 잘 작동합니다.

분리 된 창을 앞에 놓고 키 창이 된 후에 다음 코드는 모달 창으로 만듭니다 (currModalSession은 자신이 정의한 iVar입니다).

- (void)windowDidBecomeKey:(NSNotification *)notification { 
    if (notification.object == detachedWindow) { 
     if (!detachedWindow.isModalPanel) { 
      currModalSession = [NSApp beginModalSessionForWindow:detachedWindow]; 
      [NSApp runModalSession:currModalSession]; 
     } 
    } 
} 

또한 개봉 한 각 모달 세션을 종료해야합니다.

- (void)windowWillClose:(NSNotification *)notification { 
    if (notification.object == detachedWindow) { 
     if (currModalSession) { 
      [NSApp endModalSession:currModalSession]; 
     } 
    } 
} 

주 : 그래서 다음 코드는 작업이 수행는 두 가지 이유 모달 세션 여기보다는 runModalForWindow을 사용해야합니다 :

  1. 달리 메인 창 바로 차단되지 않습니다 . 나는 아직 이유가 없다. 한 가지 가능한 설명은 runModalForWindow는 사용자 상호 작용뿐만 아니라 내부 통신도 차단하므로 기본 창을 준비하는 데 더 많은 시간이 필요할 수 있습니다.
  2. 분리 된 창에서 다른 프레임 워크 모달 대화 상자 (예 : NSOpenPanel)를 실행하려는 경우 새 모달 대화 상자가 닫히기 전에 분리 된 창이 핵심 창이됩니다. 즉 runModalForWindow가 다른 창을 고정시킵니다. 닫힌 창은 닫히지 않습니다.
관련 문제