2013-02-25 3 views
8

ここではNSMenuで非常に奇妙な問題が発生しています。NSMenuItem、カスタムビュー、mouseUpの奇妙な問題:

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

しかし、もう一度、マウスをクリックしたままにしておくと、これらのメニュー項目のいずれかでmouseUpが呼び出されません。しかし、私がクリックしてカーソルを少しだけ動かし、mouseUpを離すと呼び出されます。何らかの理由で何かがこれらのイベントをインターセプトしていますが、メニューが2回目に表示され、mouseDownイベントの後にカーソルが移動すると処理が終了します。 (何らかの理由で、mouseDownが呼び出されることはありません。

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

+0

はまた、(通り抜けますmouseUpは2回目に呼び出されます)。 –

+0

だから私はこのビューの上にNSTextViewsする必要があります。それらはmouseDownを取得していますが、スーパービューと同時に失敗することもあります。ほとんどの場合、マウスイベントを傍受するNSMenuの上に何かがあります。 –

答えて

3

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

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

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

    [self updateTrackingAreas]; 
} 

よりコンテキストの場合、このリンクを見て:私は、ダブルクリックするとhttp://openradar.appspot.com/7128269