6

NSWindow私は、ユーザーがどこに行っても画面をたどる透過性を持っています(NSWindowフルスクリーンアプリであっても、すべてのアプリの前にとどまります)。
その中で、ポップアップを表示NSWindowするイベントがあります。mouseDownフルスクリーン モードで safari を使用していて、その前にウィンドウがあり、safari をクリックしてウィンドウをもう一度クリックすると、何も起こらず、mouseDown が発生しません。mouseDownイベントがトリガーされるように、もう一度クリックする必要があります。バックグラウンドアプリをクリックしてウィンドウを再度クリックしたとき にトリガーするために2回クリックする必要がないように、常にアクティブにする
方法を教えてください。ありがとうございました!NSWindowmouseDown

4

4 に答える 4

4

これがまさにあなたが望むものかどうかはわかりませんが(ウィンドウ全体の設定ではありません)、ドキュメントから:

デフォルトでは、キー ウィンドウではないウィンドウでのマウス ダウン イベントは、単にウィンドウを前面に移動してキーにします。イベントはNSView、マウス クリックが発生したオブジェクトには送信されません。ただし、は return をオーバーライドすることで、最初の NSViewマウスダウン イベントを要求でき ます。acceptsFirstMouse:YES

このメソッドの引数は、非キー ウィンドウで発生したマウス ダウン イベントです。ビュー オブジェクトはこれを調べて、マウス イベントを受け取り、ファーストレスポンダになる可能性があるかどうかを判断できます。たとえば、ウィンドウで選択されたオブジェクトに影響を与えるコントロールで、このメソッドの既定の動作が必要な場合。

mouseDown:ただし、ウィンドウがアクティブでない場合でもメッセージを受信する必要があるコントロールなど、場合によっては、この動作をオーバーライドすることが適切です。このクリックスルー動作をサポートするコントロールの例は、ウィンドウのタイトル バー ボタンです。

または、いじってみることができます

- (void)sendEvent:(NSEvent *)theEvent

カスタムの方法でイベントを処理できるかどうかを確認します。

于 2012-06-06T18:14:21.127 に答える
2

ボーダーレス NSButton インスタンスをウィンドウのビューに追加し、画像をボタンの画像として (さらに美しくするために代替画像として) 設定すると、そのまま使用できます: ボタンのアクション メソッドをアプリに接続するだけです。デリゲート (またはクリック アクションを処理するオブジェクト)。画像 (つまりボタン) をクリックすると、アクティブなウィンドウに関係なく、ボタンのアクション メソッドがトリガーされます。

于 2012-06-13T22:52:39.370 に答える
1

これは私にとってはうまくいきました。それが役立つことを願っています。これにより、ウィンドウが常にすべてのアプリケーションの一番上に表示されます

[self.window makeKeyAndOrderFront:nil];
[self.window setLevel:NSStatusWindowLevel];
于 2014-12-04T07:57:15.343 に答える
-1

あなたが本当にすべきことは、意図した動作と戦おうとするのではなく、OSと一貫した方法でまさにあなたが望むことを行うNSPanel(フローティングパレット - 特別な種類のNSWindow)を使用することだと思います。

NSPanel のドキュメントは次のとおりです。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nspanel_Class/Reference/Reference.html

そして、ここにいくつかの役立つ情報があります:

http://cocoadev.com/wiki/NSPanel

デフォルトでは、アプリケーションが非アクティブになると NSPanel は消えますが、これをオフにすることができます。

もっと完全にレイアウトできなかったことをお詫びします...時間に追われています。

編集:

おそらく、ウィンドウを希望どおりに動作させることができることに注意してください。

「ただし、NSView は、acceptsFirstMouse: をオーバーライドして YES を返すことにより、最初のマウスダウン イベントを要求できます。」

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html

「アクティベーションクリック」をスキップするには、NSView サブクラスでこれを行う必要があります。

于 2012-06-08T21:39:01.837 に答える