2011-02-01 23 views
15

私は、他のすべてのウィンドウの前に新しいNSWindowを持ってきますが、フォーカスを持っていません。NSWindowを前面にしてもフォーカスしないようにする

私はそれが次のように焦点を当てた手前に表示させることができます。

 
NSApplication *thisApp = [NSApplication sharedApplication]; 
[thisApp activateIgnoringOtherApps:YES]; 

[self makeKeyAndOrderFront:self]; 

それは別のアプリケーションから離れて焦点を当てて取る上に表示されなくようにする方法上の任意の手がかりを?代わりにmakeKeyAndOrderFront:

答えて

15

、ちょうどorderFront:docs

+0

...「activateIgnoringOtherAppsは:YES」だけで自動的に離れて他のすべてのアプリケーションからフォーカスを引っ張っています。そのコードを削除すると、別のウィンドウの後ろに新しいウィンドウが表示されます。これは奇妙なことです。ドキュメントでは、「orderFront:」が私が探している方法で動作するはずだと言われています。 – redhotvengeance

+1

@ilollar多分try [' - (void)orderFrontRegardless'](http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html) – cobbal

+0

Hmmm ...それも試しましたが、まだ運がありません。理論的には、orderFrontとorderFrontRegardlessの呼び出しは、開いているウィンドウのすべてではなく、特定のアプリケーションの表示スタック内のウィンドウを注文するためのものです。 – redhotvengeance

6

はこのような何かを試してみて試してみてください。

[window setLevel:NSScreenSaverWindowLevel + 1]; 
[window orderFront:nil]; 

これは、それをアクティブにすることなく、他のアプリケーションのウィンドウ上のウィンドウが表示されます。アプリケーションBがアクティブなアプリケーションである場合、アプリケーションA内の通常のウィンドウレベルのウィンドウは、アプリケーションBのウィンドウの前に表示することはできません。 (これには正当な理由がある、btw)。

この方法を慎重に使用してください。多くの場合、ヒューマンインタフェースのガイドラインに違反する可能性があります。悪用されると、ユーザーを怒らせる傾向があります。 (例えば、今私のテストでは、Safariで見た場所に直接ウィンドウが置かれていましたが、私がやっていたことに気づきましたが、曖昧さはではなくになりましたキーを押して、それをさらに刺激しました。もしそれが画面の一角に途切れていたら、別の話かもしれません)。

+0

ビンゴ!それはうまくいった。私はあなたの懸念に同意します...これは慎重に行わなければ実装するのは非常に危険なことです。私は慎重に約束します:) – redhotvengeance

+0

私は "orderFrontRegardless"で私の問題を理解し、代わりにそのメソッドを使うことを選択しました。これはこの機能を実装する標準的な方法だと思われます。あなたの方法は、しかし、同様に知っておくと便利です。助けてくれてありがとう! – redhotvengeance

4

スクリーンセーバー+1への注文のフロントメソッドとレベルは私のためには機能しませんでした。 -ケニーからThis answerは、しかし、やった:私は同じ結果を得ている

[yourPanel setLevel:kCGMaximumWindowLevel]; 
関連する問題