2011-01-06 10 views
3

In meiner Anwendung habe ich eine Reihe von Fenstern.Ich möchte, dass eines der Fenster die meiste Zeit oben ist, wenn die Anwendung aktiv ist. Ich habe versucht, dies zu tun, indem ich das Niveau der Fenster, aber ist nicht gelungen.Ein Fenster oben in einer Anwendung erstellen

Wenn ich NSNormalWindowLevel setze, dann wird beim Klicken auf ein anderes Fenster meiner Anwendung dieses Fenster im Hintergrund angezeigt. Wenn ich eine andere Ebene als NSNormalWindowLevel verwende, bleibt das Fenster auch dann am weitesten oben, wenn ich zu einer anderen Anwendung wechsle. Ich möchte, dass das Fenster nur dann am höchsten ist, wenn meine Anwendung aktiv ist. Wie geht das in Kakao?

Dank

Antwort

4

Ich habe dies schließlich getan, indem ich das NSWindow ausgeblendet habe, wenn die Anwendung deaktiviert wurde, indem ich die Funktion setHidesonDeactivate verwende und NSFloatingWindowLevel für das Fenster verwende.

0

Es als „oberste innerhalb einer Anwendung“ in der OS X Windowing-System nicht wirklich ein solches Konzept. Eine Anwendung hat keine eigene Ebene. Der normale Weg, um das zu tun, was sich anhört, ist ein schwebendes Feld, das verschwindet, wenn die Anwendung inaktiv ist (siehe NSPanels setFloatingPanel:). Andernfalls müssten Sie die Fensterebene um sich selbst herum wechseln.

5

Dies ist möglich, kann aber nur programmatisch durchgeführt werden (dh nicht in Interface Builder):

, wenn Sie ein Fenster haben, verwenden Sie

[window setLevel: NSMainMenuWindowLevel]; 

, wenn Sie eine Fenstersteuerung (NSWindowController) verwenden verwenden,

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

im allgemeinen Sie auf den folgenden Ebenen verwenden können:

NSNormalWindowLevel  
NSFloatingWindowLevel 
NSSubmenuWindowLevel  
NSTornOffMenuWindowLevel 
NSMainMenuWindowLevel 
NSStatusWindowLevel  
NSDockWindowLevel   
NSModalPanelWindowLevel 
NSPopUpMenuWindowLevel  
NSScreenSaverWindowLevel 

Wenn Sie ein Fenster von InterfaceBuilder anzeigen möchten (z. ein Anruf aus dem Menü), eine IBAction in Ihrem App-Delegaten und den Aufruf dieser Aktion zuweisen:

-(IBAction)showWindowCalledFromMenu:(id)sender { 

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

Wenn Sie das Fenster wollen ist oberste nur, wenn die Anwendung aktiv ist, müssen Sie wissen, ob Ihr Anwendung ist aktiv. Beobachten Sie in Ihrer "main.xib" die "Aktionen" von "First Responder". Sie können die folgenden Ereignisse verwenden, um Ihre Fensterebenen zurückzusetzen: "deminiaturize", "Front Order", "Order Back" und vieles mehr.

Hoffe, das hilft. Habe Spaß!

0

Code für copy/paste (schauen deovrat singh Antwort)

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

    //.... 
}