9

NSMenuで非常に奇妙な問題が発生しています。

私が使用するNSMenuItemの約半分には、NSMenuItemのsetView:メソッドを介したカスタムビューがあります。このカスタムビューでは、mouseUp:を実装して、ユーザーがメニュー項目をクリックしたときにキャッチします。これは、メニューを初めて開いたときに完全に機能します。

ただし、2回目は、クリック時にマウスを押したままにすると、これらのメニュー項目のいずれでもmouseUpが呼び出されません。ただし、下をクリックしてカーソルを少し動かすと、mouseUpが呼び出されます。したがって、何らかの理由で何かがこれらのイベントをインターセプトしていますが、メニューが表示されるのは2回目であり、mouseDownイベントの後にカーソルが移動すると通過します。(ただし、メニューの1回目または2回目の表示では、何らかの理由でmouseDownが呼び出されることはありません)。

誰かがここで何が起こっているのかについて何か手がかりを得ましたか?マウスイベントをインターセプトするのは何ですか。また、メニューの最初の表示ではカスタムビューに渡されるのに、2番目の表示では渡されないのはなぜですか。

4

1 に答える 1

7

私も同じ問題を抱えていました。問題は、最初のメニュー クリック後に外部アプリケーションを起動していたことであり、メニューを再度開いたときに、そのウィンドウがキーではなくなっていたことが判明しました。このメソッドをメニュー項目内で使用している NSView サブクラスに追加すると、問題が修正されました。

- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
{
    [super viewWillMoveToWindow:newWindow];

    if ( newWindow != nil && ![newWindow isKeyWindow] )
        [newWindow becomeKeyWindow];

    [self updateTrackingAreas];
}

詳細については、次のリンクをご覧ください: http://openradar.appspot.com/7128269

于 2013-10-04T18:47:19.010 に答える