2011-02-01 4 views
15

다른 모든 윈도우 앞에 NSWindow를 가져오고 싶지만 포커스를 얻지는 않습니다. 이 상단에 표시하는 방법에NSWindow를 앞쪽에 있지만 초점을 맞추지 마십시오.

 
NSApplication *thisApp = [NSApplication sharedApplication]; 
[thisApp activateIgnoringOtherApps:YES]; 

[self makeKeyAndOrderFront:self]; 

모든 단서하지만 멀리 다른 응용 프로그램에서 집중하지 :

나는 다음과 같이 초점을 전면에 표시 할 수 있습니까? 대신 makeKeyAndOrderFront:

답변

15

, 단지 orderFront: (docs)

+0

...은 "activateIgnoringOtherApps가 : YES"그냥 자동으로 떨어져 다른 모든 응용 프로그램에서 초점을 당기고 있습니다. 그 코드를 제거하면 새로운 윈도우가 다른 윈도우 뒤에 나타납니다. 이는 "orderFront :"가 내가 원하는 방식으로 동작해야한다고 doc이 말하기 때문에 이상합니다. – redhotvengeance

+1

@ilollar 어쩌면 시도해보십시오 ['- (void) orderFrontRegardless'] (http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html) – cobbal

+0

흠 ... 그것도 시도했지만 여전히 운이 없다. 이론적으로 orderFront 및 orderFrontRegardless에 대한 호출은 열려있는 모든 윈도우가 아닌 특정 응용 프로그램 디스플레이 스택 내에서 윈도우를 정렬하는 것입니다. – redhotvengeance

6

이런 식으로 뭔가를 시도하려고 :

[window setLevel:NSScreenSaverWindowLevel + 1]; 
[window orderFront:nil]; 

이 있지만, 활성화하지 않고 다른 응용 프로그램의 창 위에있는 창을 표시합니다. 응용 프로그램 B가 활성 응용 프로그램이면 응용 프로그램 A의 일반 창 레벨을 가진 창이 응용 프로그램 B의 창 앞에 표시 될 수 없습니다. (이것에 대한 좋은 이유가 있습니다, btw).

이 방법을 신중하게 사용하십시오. 대부분의 경우, 휴먼 인터페이스 지침을 위반할 가능성이 높습니다. 잘못 사용하면 사용자를 화나게하는 경향이 있습니다. (예를 들어, 지금 테스트를 진행 한 결과, Safari에서보고 있던 위치 바로 위에 창이 나타났습니다. 내가하고 있었던 일의 방식 이었지만 사실은 이 아니며,이 아님을 알게되었습니다. 키를 눌러서 더 자극적이게 만들었습니다. 화면의 구석에 올라간다면, 다른 이야기 일 수 있습니다.)

+0

빙고! 그게 효과가 있었어. 나는 귀하의 우려에 동의합니다 ... 이것은 신중하게하지 않으면 구현하기 매우 위험 할 수 있습니다. 나는 조심스럽게 약속한다. – redhotvengeance

+0

"orderFrontRegardless"로 내 이슈를 알아 냈고 대신이 메소드를 사용하기로 선택했다.이 기능을 구현하는 표준 방법 인 것 같다. 그러나 방법을 아는 것도 유용합니다. 도와 주셔서 감사합니다! – redhotvengeance

4

스크린 세이버 +1의 주문 앞면 방법과 레벨이 저에게 효과적이지 않았습니다. 더 - 케니에서 This answer하지만, 한 : 나는 같은 결과를 얻고있다

[yourPanel setLevel:kCGMaximumWindowLevel]; 
관련 문제