2011-01-06 6 views
3

В моем приложении у меня есть набор окон. Я хочу, чтобы какое-то из окон было самым большим в течение всего времени, когда приложение активно. Я попытался сделать это, изменив уровень окна, но не удалось.Создание окна в верхней части приложения

Если я поставил NSNormalWindowLevel, то при нажатии любого другого окна моего приложения это окно будет в фоновом режиме. Если я использую какой-либо другой уровень, чем NSNormalWindowLevel, то окно остается самым верхним, даже если я переключусь на другое приложение. Я хочу, чтобы окно было самым верхним только тогда, когда мое приложение активно. Как это сделать в какао?

Благодаря

ответ

4

Я сделал это, наконец, скрыв NSWindow, когда приложение дезактивировано, используя функцию setHidesonDeactivate и используя NSFloatingWindowLevel для окна.

0

Там на самом деле не какой-либо такое понятие, как «верхний внутри приложения» в системе OS X взвешиванием. Приложение не имеет собственного уровня. Обычный способ делать то, что вам нравится, это иметь плавающую панель, которая исчезает, когда приложение неактивно (см. NSPanel's setFloatingPanel:). В противном случае вам придется переключать уровень окна вокруг себя.

5

Это возможно, но может быть сделано только программно (это означает, что не в Interface Builder):

, если у вас есть окно, используйте

[window setLevel: NSMainMenuWindowLevel]; 

если вы используете контроллер окна (NSWindowController) используйте

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

в общем, вы можете использовать на следующих уровнях:

NSNormalWindowLevel  
NSFloatingWindowLevel 
NSSubmenuWindowLevel  
NSTornOffMenuWindowLevel 
NSMainMenuWindowLevel 
NSStatusWindowLevel  
NSDockWindowLevel   
NSModalPanelWindowLevel 
NSPopUpMenuWindowLevel  
NSScreenSaverWindowLevel 

Если вы хотите показать окно, самое верхнее из Interfacebuilder (т. вызов меню), создать IBAction в вашем App-делегатом и назначить вызов этому действию:

-(IBAction)showWindowCalledFromMenu:(id)sender { 

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

Если вы хотите, чтобы окно быть верхним только тогда, когда ваше приложение является активным, вы должны знать, если ваш приложение активно. В вашем «main.xib» смотреть в «действия» от «First Responder». Вы можете использовать следующие события для сброса ваших оконных уровней: «deminiaturize», «order Front», «Order Back» и многое другое.

Надеюсь, это поможет. Повеселись!

0

код для копирования/вставки (смотрите deovrat Singh ответ)

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

    //.... 
} 
Смежные вопросы