2012-05-21 3 views
1

저는 코코아를 사용하여 다중 문서 애플리케이션을 작성하고 있습니다. 사용자는 문서를 열 때 암호를 입력해야합니다. 문서 작업을하지 않고 일정 시간이 지나면 사용자는 다시 암호를 입력해야합니다.커스텀 시트가 포커스를 빼앗는 것을 막으십시오.

지금은 NSAplicationbeginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:을 사용하여 사용자 정의 시트에 비밀번호 프롬프트를 표시하고 있습니다. 그것이 작동하는 동안 그것은 다른 문서가 그 당시에 일하고있다하더라도 창문의 불행한 부작용을 앞에두고 주어진 초점을 가지고 있습니다. 내 응용 프로그램이 앞에있는 경우에만 문제가 있습니다.

상위 창이 활성 상태가 아닌 경우 시트가 포커스를 잡아 당기는 것을 방지하는 방법이 있습니까?

+0

어쩌면 윈도우 키 될 때까지 시트를 나타내는 지연? –

+0

그럴 수도 있습니다;) –

답변

0

간단한 방법은 없습니다. 해킹 방법은 NSWindow의 서브 클래스를 문서의 창 의 시트 창으로 만들고이 클래스에서 beginFheet : beginSheet를 호출하는 동안 아무 것도하지 않도록 orderFront : 및 makeKeyWindow를 모두 재정의하는 것입니다. 예를 들어, NSWindow 표시 서브 클래스에서

:

-(void)awakeFromNib 
{ 
    hack = NO; 
} 

-(void)hackOnHackOff:(BOOL)foo 
{ 
    hack = foo; 
} 

- (void)orderFront:(id)sender 
{ 
    if (!hack) 
     [super orderFront:sender]; 
} 

- (void)makeKeyWindow 
{ 
    if (!hack) 
     [super makeKeyWindow]; 
} 

다음 beginSheet 호출과 같습니다

-(void)sheet 
{ 
    SpecialSheetWindow* documentWindow = [self windowForSheet]; 
    [documentWindow hackOnHackOff:YES]; 
    [sheetWindow hackOnHackOff:YES]; 
    [[NSApplication sharedApplication] beginSheet:sheetWindow 
         modalForWindow:documentWindow 
         modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:nil]; 
    [documentWindow hackOnHackOff:NO]; 
    [sheetWindow hackOnHackOff:NO]; 
} 
+0

네, 실제로 해킹이 될 것이고 오히려이 경로를 피하는 것입니다. Ken T.의 제안이 윈도우가 중요 해지면 시트 만 표시하고 사용자에게 시각적 큐 (아마도 반투명 오버레이 일 수도 있음)를 보여줄 것입니다. 두 분 모두 고마워요! – ims

관련 문제