Создание верхнего окна в приложении - PullRequest
3 голосов
/ 06 января 2011

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

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

Спасибо

Ответы [ 4 ]

5 голосов
/ 19 марта 2011

Это возможно, но может быть сделано только программно (то есть не в Интерфейсном Разработчике):

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

[window setLevel: NSMainMenuWindowLevel];

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

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

. В общем случае вы можете использовать один из следующих уровней:

NSNormalWindowLevel       
NSFloatingWindowLevel   
NSSubmenuWindowLevel    
NSTornOffMenuWindowLevel
NSMainMenuWindowLevel   
NSStatusWindowLevel      
NSDockWindowLevel        
NSModalPanelWindowLevel   
NSPopUpMenuWindowLevel    
NSScreenSaverWindowLevel 

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

-(IBAction)showWindowCalledFromMenu:(id)sender {

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

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

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

5 голосов
/ 14 апреля 2011

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

0 голосов
/ 21 ноября 2016

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

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

    //....
}
0 голосов
/ 06 января 2011

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

...