2011-01-06 5 views
3

私のアプリケーションでは、一連のウィンドウがあります。アプリケーションがアクティブなときにウィンドウの一番上にウィンドウを表示したいと思います。ウィンドウが、成功しませんでした。アプリケーション内でウィンドウを一番上にする

私はNSNormalWindowLevelを置くと、私のアプリケーションの他のウィンドウをクリックすると、このウィンドウはバックグラウンドになります。NSNormalWindowLevel以外のレベルを使用すると、他のアプリケーションに切り替わってもウィンドウが一番上に残ります。自分のアプリケーションがアクティブなときだけ、ウィンドウを最上位にしたい。ココアでこれを行うにはどうすればいいですか?

おかげ

答えて

4

最後に、関数setHidesonDeactivateを使用してアプリケーションを無効にし、ウィンドウにNSFloatingWindowLevelを使用してNSWindowを非表示にしました。

0

OSのXウィンドウシステムでは、「アプリケーション内の最上位」として、そのような概念は本当にありません。アプリケーションには独自のレベルはありません。あなたが望むように聞こえるようにする通常の方法は、アプリケーションがアクティブでないときに浮動パネルを消すことです(NSPanelのsetFloatingPanel:を参照)。それ以外の場合は、自分自身のウィンドウレベルを切り替える必要があります。 (のNSWindowController)あなたは窓を持っている場合は、ウィンドウのコントローラを使用する場合

は、

[window setLevel: NSMainMenuWindowLevel]; 

を使用します。

5

これは可能ですが、唯一の(つまり、Interface Builderでない意味)プログラム的に行うことができます

0123:、あなたが次のレベルの上で使用することができ、一般的に

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

を使用

Interfacebuilderから一番上のウィンドウを表示する場合はメニューからの呼び出し)、あなたのApp-委任でIBActionを作成し、このアクションへの呼び出しを割り当てる:

-(IBAction)showWindowCalledFromMenu:(id)sender { 

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

あなたは窓があなたのアプリケーションがアクティブな場合にのみ、最上位であることしたい場合は、あなたの場合は知っている必要がありますアプリケーションがアクティブです。あなたの "main.xib"では、 "First Responder"の "actions"を監視します。次のイベントを使用してウィンドウレベルをリセットすることができます: "deminiaturize"、 "order front"、 "order back"など。

これが役に立ちます。楽しむ!

0

コピー/貼り付け用のコード

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

    //.... 
} 
deovrat答えシンを見て)
関連する問題