2

NSBorderlessWindowMaskユーザーが特定のホットキーをタップしたときに表示されるアプリケーションにカスタムウィンドウがあります。このウィンドウには `NSTextField があり、ウィンドウが表示されたときにファーストレスポンダーになる必要があります。このウィンドウはメイン ウィンドウではありませんが、メイン ウィンドウからフォーカスを取得できます。これを表示してキーにするために私が行うことは次のとおりです。

[self.myCustomWindow makeKeyAndOrderFront:sender];

次に、ファーストレスポンダを設定します

[self.myTextField becomeFirstResponder];

アプリケーションが最前面のアプリケーションである場合、すべてが期待どおりに機能しますが、そうでない場合、ウィンドウは表示されますが、キーにはならず、クリックしてアクティブにする必要があります。

クラスでオーバーライドしますCustomWindow

- (BOOL)canBecomeKeyWindow {

    return YES;
}

何が問題なのですか?

ありがとう!

4

1 に答える 1

0

Cocoa Event Handling Guideによると、最前面のアプリケーションのみがメイン ウィンドウとキー ウィンドウの状態を持つことができます。

アプリケーションがメイン ウィンドウとキー ウィンドウの両方を表示している場合、両方のウィンドウのレスポンダー チェーンがアクション メッセージに関与する可能性があります。「ウィンドウの階層化とウィンドウの種類」で説明したように、メイン ウィンドウは最前面のドキュメントまたはアプリケーション ウィンドウです。多くの場合、メイン ウィンドウにはキー ステータスもあり、ユーザー入力の現在の焦点であることを意味します。ただし、メイン ウィンドウには、ドキュメント ウィンドウでの選択内容の詳細を表示する [検索] パネルや [情報] ウィンドウなど、それに関連付けられたセカンダリ ウィンドウまたはパネルを含めることができます。このセカンダリ ウィンドウがユーザー入力の焦点である場合、それがキー ウィンドウです。

これを回避する方法はありません。

編集:ウィンドウプログラミングガイドからも:

キー ウィンドウはアクティブなアプリケーションに属しているため、強調表示されたタイトル バーには、現在アクティブなアプリケーションを示す補助的な効果があります。キー ウィンドウは、アクティブなアプリケーションで最も目立ってマークされたウィンドウであり、別の意味で「キー」となります。つまり、画面上でユーザーの注意が最も集中する場所です。

于 2014-07-29T10:11:18.743 に答える