0

내가 여기에 사용자 정의 모달 창을 만들려고하고있어 내가 지금까지 가지고있는 코드입니다 요청이 들어오는 상위 창에서 작업을 수행 할 수 있습니다. 이 메서드는 NSDocument 개체에서 호출됩니다.모달 창 코코아

나는 읽으려고했습니다 Using Custom Sheets

그러나 나는 그것이 어디 선언 아니에요으로 myCustomSheet이 무엇인지 확실하지 않다. 나는 그것이 NSWindow 인스턴스 변수라고 가정합니다.

모달이 아닌 이유를 이해할 수 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다. 감사합니다.

답변

3

Using Modal Windows 전용으로 특별히 제작 된 Apple Window Programming Guide 섹션이 있습니다.

0

혹시 worksWhenModalYES으로 설정 했습니까? 이로 인해 은 정확히의 행동을 설명하기 때문에 그 목적이 있습니다.

자신의 윈도우 컨트롤러에서 패널을 포장하는 것과 관련하여 (꼭 NSPanel을 사용하고 있습니까?) 그렇지 않아도됩니다. 나는 실제로 창 컨트롤러없이 나의 시트를 만든다. 필요한 창 컨트롤러에 사용자 정의 논리가 있습니까? AppKit이 처리합니다.

+0

'NSWindowController'를 통해 xib 파일로 만든 창을 초기화 할 수없는 것처럼 다른 곳에서는 읽을 수 없습니다. 그래서 NSBundle을 통해 NSWindow에로드 된 xib 파일을 얻는 방법을 알아야합니다. – jdelaune

+1

정말 XIB가 필요합니까? IB가없는 윈도우를 만드는 것이 문서 작성이 인터페이스 작성기를 통해 이루어지는 유일한 방법 인 것처럼 보이게 만드는 버그가 있습니다. 사실 창 컨트롤러가없는 상태에서 제 시트를 만듭니다. 필요한 창 컨트롤러에 사용자 정의 논리가 있습니까? AppKit이 처리합니다. – d11wtq

5

희망이 도움이됩니다. 윈도우 컨트롤러를 항상 모달로 실행하려면. NSWindowController의 하위 클래스를 만들고이 두 메서드를 추가하십시오.

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//TODO 
     [[NSApplication sharedApplication] runModalForWindow:self.window]; 
    }); 
} 

- (void)windowWillClose:(NSNotification *)notification 
{ 
    [[NSApplication sharedApplication] stopModal]; 
}