Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在应用程序中使窗口位于最顶端_Cocoa_Macos_Window_Osx Leopard - Fatal编程技术网

Cocoa 在应用程序中使窗口位于最顶端

Cocoa 在应用程序中使窗口位于最顶端,cocoa,macos,window,osx-leopard,Cocoa,Macos,Window,Osx Leopard,在我的应用程序中,我有一组窗口。我希望在应用程序处于活动状态时,其中一个窗口始终处于顶部。我尝试通过更改窗口的级别来执行此操作,但没有成功 如果我放置NSNormalWindowLevel,然后单击应用程序的任何其他窗口,该窗口将进入后台。而如果我使用NSNormalWindowLevel以外的任何其他级别,则即使切换到其他应用程序,该窗口仍将保持最顶层。我希望只有当我的应用程序处于活动状态时,窗口才是最上面的。如何在cocoa中做到这一点 谢谢在OSX窗口系统中,实际上没有“应用程序中的最顶层

在我的应用程序中,我有一组窗口。我希望在应用程序处于活动状态时,其中一个窗口始终处于顶部。我尝试通过更改窗口的级别来执行此操作,但没有成功

如果我放置NSNormalWindowLevel,然后单击应用程序的任何其他窗口,该窗口将进入后台。而如果我使用NSNormalWindowLevel以外的任何其他级别,则即使切换到其他应用程序,该窗口仍将保持最顶层。我希望只有当我的应用程序处于活动状态时,窗口才是最上面的。如何在cocoa中做到这一点


谢谢

在OSX窗口系统中,实际上没有“应用程序中的最顶层”这样的概念。应用程序没有自己的级别。执行听起来像是您想要的操作的正常方法是,当应用程序处于非活动状态时,一个浮动面板将消失(请参阅NSPanel的
setFloatingPanel:
)。否则,您必须自己切换其窗口级别。

这是可能的,但只能通过编程实现(这意味着不在Interface Builder中):

如果你有一个窗口,使用

[window setLevel: NSMainMenuWindowLevel];
如果使用窗口控制器(NSWindowController),请使用

通常,您可以在以下级别中的任意一个级别上使用:

NSNormalWindowLevel       
NSFloatingWindowLevel   
NSSubmenuWindowLevel    
NSTornOffMenuWindowLevel
NSMainMenuWindowLevel   
NSStatusWindowLevel      
NSDockWindowLevel        
NSModalPanelWindowLevel   
NSPopUpMenuWindowLevel    
NSScreenSaverWindowLevel 
如果要从Interfacebuilder显示最上面的窗口(即从菜单中调用),请在应用程序代理中创建iAction并将调用分配给此操作:

-(IBAction)showWindowCalledFromMenu:(id)sender {

   [self.window setLevel: NSMainMenuWindowLevel];
   [self.window makeKeyAndOrderFront:self];
}
如果希望窗口仅在应用程序处于活动状态时处于最顶部,则必须知道应用程序是否处于活动状态。在“main.xib”中,观察“第一响应者”的“动作”。您可以使用以下事件来重置窗口级别:“解除锁定”、“前订单”、“后订单”等等


希望这有帮助。玩得开心

我最终做到了这一点,在应用程序停用时,使用函数sethidesondactivate隐藏NSWindow,并为窗口使用NSFloatingWindowLevel。

复制/粘贴代码(lookdeovrat singh答案)

-(IBAction)showWindowCalledFromMenu:(id)sender {

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

    //....
}