2

ウィンドウから離れてクリックすると、奇妙な問題が発生します。メインとキーを辞退します。次にクリックして戻ると、クリックしたビューがマウスのクリックに反応しません。しかし、2 回目のクリックでビューが応答します。最初のクリック時にウィンドウがキーではなく、クリックによってウィンドウがキーになり、2 回目のクリックを処理できたかのように。

最初のクリック イベント中にアプリケーションがイベントを取得しているかどうかを確認するために、サブクラスNSApplication化してインターセプトしました。sendEvent:さらに、私はレスポンダー チェーンをダンプし、確かに私のビューがチェーン内にあることを確認しましたが、ウィンドウは 2 回目のクリックまで重要ではありませんでした。また、最初のクリック イベントを受け取ったときに、アプリケーションがアクティブになっていないことにも気付きました。これはどのように可能ですか?アプリケーションは、マウス イベントを受け取ったときにアクティブになるはずではありませんか? 鶏卵...

考えや提案はありますか?

更新:ドキュメントを読んだ後、私はこれを見つけました:

マウスダウン イベントは、カーソルがビュー オブジェクト上にあるときにユーザーがマウス ボタンを押すと送信されます。ビューを含むウィンドウがキー ウィンドウでない場合、ウィンドウはキー ウィンドウになり、マウスダウン イベントを破棄します。ただし、ビューは、NSView の acceptFirstMouse: メソッドをオーバーライドして YES を返すことにより、このデフォルトの動作を回避できます。

それで、それが起こっているようです。ただし、オーバーライドしようacceptsFirstMouse:としacceptsFirstResponderましたが、役に立ちませんでした。私の意見はまだ「最初のマウスを受け入れる」ではありません。

ありがとう!

4

1 に答える 1

0

10.10 > アプリ デリゲートで - マウス イベントにフックして、ウィンドウを強制的にアクティブにすることができます。

- (void)applicationDidUpdate:(NSNotification *)notification {
     NSLog(@"did update");
    // [[NSApp mainWindow] makeKeyWindow];doesn't work. not sure why. 
    [[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}

- (void)applicationDidResignActive:(NSNotification *)notification {
   // your window lost focus here
}

- (void)applicationDidBecomeActive:(NSNotification *)notification {
   // 
}
于 2015-02-02T02:10:01.717 に答える