2011-02-06 4 views

답변

6

글쎄, 이걸 알아내는 것이 끝났지 만, 많은 연구가 필요 했으므로 누군가가 같은 문제에 부딪 힐 경우 여기에 세부 정보를 게시 할 것입니다. 우선, 몇 가지 기본 사항 :

  1. 실제로 같은 시간에 열쇠가 될이 창을하는 것은 불가능
  2. 그것은 -isKeyWindow를 재정 의하여이 열쇠 생각으로 가짜 창으로 가능하지만이를 포기하지 않습니다 첫 번째 응답자 상태 창에 포함 된보기

내 시나리오 :

나는 (이유는 irrelavant입니다) 내 메인 애플리케이션 창으로 NSTableView을 포함하는 자식 창을 추가했습니다. 하위 창은 NSPanel이고 NSBorderlessWindowMask입니다. 메인 윈도우에서 포커스를 빼앗 겼기 때문에 패널을 키 윈도우로 만들지 않고 첫 번째 응답자 상태를 NSTableView에게주고 싶었습니다. (그리고 자식 창 환상의 전체 점은 자식 창을 메인 윈도우의 일부처럼 보이게 만드는 것이 었습니다.).

내가 시도한 첫 번째 일은 을 반환하기 위해 isKeyWindow을 무시함으로써 키 창 내부에 있다고 생각하도록 테이블보기를 속일 수있었습니다. 이로 인해 테이블 ​​뷰가 첫 번째 응답자 인 것처럼 그릴 수 있지만 여전히 첫 번째 응답자 상태가 제공되지 않았습니다.

솔루션 :

그래서 기본적으로 NSBorderlessWindowMask 윈도우 키가 될 수 없습니다. 테이블 뷰를 첫 번째 응답자로 만들려면 윈도우가 열쇠 여야했기 때문에 테두리없는 윈도우 서브 클래스에서 canBecomeKeyWindow을 오버플로하여 YES을 반환했습니다. 이것은 물론, 내가 피하고 싶었던 것 중 하나 인 메인 윈도우에서 중요한 상태를 제거했다. 이 문제를 해결하려면, 내 주요 창을 서브 클래스 및 오버라이드 다음과 같은 방법 :

- (BOOL)isMainWindow 
{ 
    return YES; 
} 

- (BOOL)isKeyWindow 
{ 
    return ([NSApp isActive]) ? YES : [super isKeyWindow]; 
} 

이 서브 클래스 검사를 응용 프로그램이 활성화 된 경우,하고 있는지, 항상 YES 그래서 그 상관없이 창이 활성화되지 반환 응용 프로그램에서 주 창은 항상 마치 여전히 키처럼 동작합니다. 이런 종류의 것은 여러 개의 창을 동시에 키로 만들 수 있으며, 주 창에서 키 창 상태를 잃지 않고 다른 창으로 이동할 수 있다는 환상을줍니다. 희망이 도움이!

+0

끔찍한 답변입니다. 내 아침을 구했다. 감사! –

+0

10.8을 사용하면이 솔루션이 더 이상 작동하지 않을 수 있습니까? – tungsten

+0

"작동하지 않는다"는 것은 무엇을 의미합니까? –

관련 문제