NSPanel 키 창 상태를 제공하지 않고 NSPanel의 첫 번째 응답자 상태에서 NSView를 제공 할 수 있습니까?NSPanel에서 NSView를 키 창 상태없이 첫 번째 응답자로 지정
감사합니다.
NSPanel 키 창 상태를 제공하지 않고 NSPanel의 첫 번째 응답자 상태에서 NSView를 제공 할 수 있습니까?NSPanel에서 NSView를 키 창 상태없이 첫 번째 응답자로 지정
감사합니다.
글쎄, 이걸 알아내는 것이 끝났지 만, 많은 연구가 필요 했으므로 누군가가 같은 문제에 부딪 힐 경우 여기에 세부 정보를 게시 할 것입니다. 우선, 몇 가지 기본 사항 :
-isKeyWindow
를 재정 의하여이 열쇠 생각으로 가짜 창으로 가능하지만이를 포기하지 않습니다 첫 번째 응답자 상태 창에 포함 된보기내 시나리오 :
나는 (이유는 irrelavant입니다) 내 메인 애플리케이션 창으로 NSTableView
을 포함하는 자식 창을 추가했습니다. 하위 창은 NSPanel
이고 NSBorderlessWindowMask
입니다. 메인 윈도우에서 포커스를 빼앗 겼기 때문에 패널을 키 윈도우로 만들지 않고 첫 번째 응답자 상태를 NSTableView
에게주고 싶었습니다. (그리고 자식 창 환상의 전체 점은 자식 창을 메인 윈도우의 일부처럼 보이게 만드는 것이 었습니다.).
내가 시도한 첫 번째 일은 을 반환하기 위해 isKeyWindow
을 무시함으로써 키 창 내부에 있다고 생각하도록 테이블보기를 속일 수있었습니다. 이로 인해 테이블 뷰가 첫 번째 응답자 인 것처럼 그릴 수 있지만 여전히 첫 번째 응답자 상태가 제공되지 않았습니다.
솔루션 :이
그래서 기본적으로 NSBorderlessWindowMask 윈도우 키가 될 수 없습니다. 테이블 뷰를 첫 번째 응답자로 만들려면 윈도우가 열쇠 여야했기 때문에 테두리없는 윈도우 서브 클래스에서 canBecomeKeyWindow
을 오버플로하여 YES
을 반환했습니다. 이것은 물론, 내가 피하고 싶었던 것 중 하나 인 메인 윈도우에서 중요한 상태를 제거했다. 이 문제를 해결하려면, 내 주요 창을 서브 클래스 및 오버라이드 다음과 같은 방법 :
- (BOOL)isMainWindow
{
return YES;
}
- (BOOL)isKeyWindow
{
return ([NSApp isActive]) ? YES : [super isKeyWindow];
}
이 서브 클래스 검사를 응용 프로그램이 활성화 된 경우,하고 있는지, 항상 YES
그래서 그 상관없이 창이 활성화되지 반환 응용 프로그램에서 주 창은 항상 마치 여전히 키처럼 동작합니다. 이런 종류의 것은 여러 개의 창을 동시에 키로 만들 수 있으며, 주 창에서 키 창 상태를 잃지 않고 다른 창으로 이동할 수 있다는 환상을줍니다. 희망이 도움이!
끔찍한 답변입니다. 내 아침을 구했다. 감사! –
10.8을 사용하면이 솔루션이 더 이상 작동하지 않을 수 있습니까? – tungsten
"작동하지 않는다"는 것은 무엇을 의미합니까? –