2011-01-06 28 views
3

在我的申請,我有一組窗戶向的希望的窗口之一,是最上面的所有應用程序處於active.I試圖通過改變水平做這個的時候窗口,但沒有成功。在應用程序中最頂層的製作窗口

如果我把NSNormalWindowLevel,然後點擊我的應用程序的任何其他窗口此窗口進去background.While如果我使用任何其他級別比NSNormalWindowLevel,則窗口保持最頂層,即使我切換到其它應用程序。我希望窗口只在我的應用程序處於活動狀態時纔是最頂層的。如何在可可中做到這一點?

感謝

回答

4

我這樣做。最後,通過隱藏NSWindow當應用程序使用功能setHidesonDeactivate和使用NSFloatingWindowLevel爲窗口停用。

0

確實沒有任何這樣的概念,在OS X窗口系統「的應用程序中層次最高的」。應用程序沒有自己的級別。正常的方式來做到這聽起來像你想要的是有一個浮動面板時的應用是不活動會消失(見NSPanel的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的一個窗口最上面的(即從菜單中調用),創建你的App-委派IBAction爲和呼叫分配給這個動作:如果你想在窗口被

-(IBAction)showWindowCalledFromMenu:(id)sender { 

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

最頂層,只有當你的應用程序是活動的,你要知道,如果你的應用程序已激活。在你的「main.xib」中注意「First Responder」中的「操作」。您可以使用以下事件重置windowlevels:「deminiaturize」,「爲了接待」,「命令返回」和更多。

希望這會有所幫助。玩的開心!

0

複製/粘貼代碼(看deovrat辛格答案)

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

    //.... 
} 
相關問題