2011-01-06 2 views
3

내 응용 프로그램에는 일련의 windows가 있습니다. 응용 프로그램이 활성 상태 일 때 가장 중요한 창 중 하나가 필요합니다. 창,하지만 성공하지 못했습니다.응용 프로그램 내에서 윈도우를 최상위로 만들기

만약 내가 NSNormalWindowLevel 넣어 다음 내 응용 프로그램의 다른 창을 클릭하여이 창을 배경으로갑니다. NSNormalWindowLevel 것보다 다른 수준을 사용하는 경우 다음 다른 응용 프로그램으로 전환해도 창 최상위 남아 있습니다. 내 응용 프로그램이 활성화되어있을 때만 창을 최상위로 유지하고 싶습니다. 코코아에서이 작업을 수행하는 방법은 무엇입니까? 는 OS X 윈도우 시스템에서 "응용 프로그램 내 맨"같은 그런 개념이 정말 없다

감사

답변

4

마지막으로, setHidesonDeactivate 함수를 사용하고 창에 NSFloatingWindowLevel을 사용하여 응용 프로그램을 비활성화 할 때 NSWindow를 숨겨서이 작업을 수행했습니다.

0

. 응용 프로그램에 자체 수준이 없습니다. 원하는 소리를내는 정상적인 방법은 응용 프로그램이 비활성 상태 일 때 사라지는 부동 패널을 사용하는 것입니다 (NSPanel의 setFloatingPanel: 참조). 그렇지 않으면 자신의 윈도우 레벨을 전환해야합니다. (NSWindowController) 당신은 창문이 경우 윈도우 컨트롤러를 사용하는 경우

[window setLevel: NSMainMenuWindowLevel]; 

를 사용

5

이 가능하지만, 단지 (즉, 인터페이스 빌더에없는 의미) 프로그래밍 방식으로 수행 할 수 있습니다

: 당신이 다음 수준에 사용할 수 있습니다 일반적으로

[windowController showWindow:self]; 
[windowController.window setLevel: NSMainMenuWindowLevel]; 

를 사용

Interfacebuilder에서 최상위 창을 표시하려는 경우 (예 : 메뉴에서 전화가), 당신의 앱-위임에 IBAction를을 만들고이 작업에 전화를 할당 : 응용 프로그램이 활성화되어있을 때 당신이있는 창을 원하는 경우

-(IBAction)showWindowCalledFromMenu:(id)sender { 

    [self.window setLevel: NSMainMenuWindowLevel]; 
    [self.window makeKeyAndOrderFront:self]; 
} 

최상위 만, 당신은 알고있다 당신의 응용 프로그램이 활성 상태입니다. "main.xib"에서 "First Responder"의 "actions"를보십시오. 다음 이벤트를 사용하여 창 레벨을 재설정 할 수 있습니다 : "deminiaturize", "order front", "order back"등등.

희망이 도움이됩니다. 재미있어!

0

복사/붙여 넣기위한 코드

-(void) windowDidLoad { 
    [super windowDidLoad]; 
    [self.window setLevel: NSFloatingWindowLevel]; 
    [self.window setHidesonDeactivate:YES]; 

    //.... 
} 
( deovrat 대답 싱)을 보면
관련 문제