2011-08-15 3 views
3

window : willPositionSheet에 대한 메소드를 대체하는 Cocoa 윈도우 컨트롤러가 정의되어 있지만 대화 상자가 열릴 때 호출되지 않습니다.window : willPositionSheet : usingRect가 호출되지 않습니다.

- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect 
{ 
return rect; 
} 

시트 대화 상자를 만들 때 중요한 대화 상자는 시트이고 부모는 Cocoa 참조로 전달되는 Carbon 창입니다.

아이디어가 있으십니까? 사전에

감사

당신이 당신의 윈도우의 대리인으로 당신의 창 컨트롤러를 설정해야합니다 있도록 NSWindow 위임 방법은, 하나 소유자 인터페이스 빌더 또는으로의 파일을 윈도우의 위임 콘센트를 연결함으로써,

답변

5

윈도우의 ‑setDelegate: 메소드 호출.

+0

감사합니다. Rob! 글쎄, 난 생각 난에서 뭘하는지입니다 해요 : [theApp beginSheet : [대화 상자] \t modalForWindow : 창 \t modalDelegate : 대화 didEndSelector : @selector (sheetDidEnd : 반환 코드 :에서는 ContextInfo : \t에서는 ContextInfo을 :무]; 대화 상자는 NSWindowController에서 확장됩니다. 작성 후에도 위임자 설정을 시도했지만이 메소드는 여전히 호출되지 않습니다. –

+0

아니요, 객체를 'window' 객체의 델리게이트로 설정해야합니다. 이것은'beginSheet : ... '메소드에서 지정한 모달 델리게이트와 완전히 다릅니다. 이것은 모달 대화 상자에서 메시지를받는 임시 대리자입니다. 시트가 첨부 된 주 윈도우에 대한 델리게이트가 필요하며 그 델리게이트에서 반드시 'window : willPositionSheet : usingRect :'메소드를 구현해야합니다. –

+0

Rob, NSObject 를 확장하는 새로운 클래스를 만들려고했는데 두려웠습니다. willPositionSheet : usingRect를 호출하고 beginSheet가 호출 된 후에 델리게이트 객체를 만들고 기본 윈도우로 설정했습니다. setDelegate :하지만 window : willPositionSheet : 여전히 usingRect가 호출되지 않습니다. –

관련 문제