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