나는 해결책을 직접 찾았습니다. 지금은 잘 작동합니다.
분리 된 창을 앞에 놓고 키 창이 된 후에 다음 코드는 모달 창으로 만듭니다 (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을 사용해야합니다 :
- 달리 메인 창 바로 차단되지 않습니다 . 나는 아직 이유가 없다. 한 가지 가능한 설명은 runModalForWindow는 사용자 상호 작용뿐만 아니라 내부 통신도 차단하므로 기본 창을 준비하는 데 더 많은 시간이 필요할 수 있습니다.
- 분리 된 창에서 다른 프레임 워크 모달 대화 상자 (예 : NSOpenPanel)를 실행하려는 경우 새 모달 대화 상자가 닫히기 전에 분리 된 창이 핵심 창이됩니다. 즉 runModalForWindow가 다른 창을 고정시킵니다. 닫힌 창은 닫히지 않습니다.
실제로 주제는 분리 된 창을 모달 창으로 설정하는 것입니다. – schen