すべて、 私はNSBox
のサブクラスを持ち、ラベルと2つのimageViewsのようなサブビューを持っています。私はmenuForEvent:
をオーバーライドしました。しかし、NSBox
をクリックして選択し、後でそのサブビューのControl + Clickをクリックすると、menuForEvent:
は呼び出されません。Control + Click not trigger menuForEvent
私はそのような場合がわかりません。
すべて、 私はNSBox
のサブクラスを持ち、ラベルと2つのimageViewsのようなサブビューを持っています。私はmenuForEvent:
をオーバーライドしました。しかし、NSBox
をクリックして選択し、後でそのサブビューのControl + Clickをクリックすると、menuForEvent:
は呼び出されません。Control + Click not trigger menuForEvent
私はそのような場合がわかりません。
あなたがmenuForEventを実装する必要があります。サブビューでは、あまりにも、そしてあなたのスーパーの(NSBoxサブクラス)にイベントを転送menuForEventの実装を:
- (NSMenu *)menuForEvent:(NSEvent *)event
{
return [[self superview] menuForEvent:event];
}
私はそれが自動的にせずにスーパーに通って落下すると仮定
サブビューをサブクラス化する必要があります。私は右クリックがあるが、何らかの理由でコントロールをクリックしていないことがわかった。
これは実際問題を痛みなく解決します、ありがとう! – duncanwilcox
コントロールのクリックと右クリックが(jfewtrが指摘したように)NSViewによってどのように処理されるかに違いがあります。 のコンテキストメニューが表示されます。を右クリックします。クリックがサブビュー内にある場合はの場合はをクリックします。私はこのことに驚き、実際にここでは詳細にそれについての記事を書いた
ありカップル潜在的な解決策がありますが、あなたの全体のサブビューツリーをカスタマイズ/オーバーライドすることは、おそらく最良の選択ではありません。それは、それはこの動作をハードコードする素晴らしいませんが
- (void)mouseDown:(NSEvent *)theEvent
{
if (theEvent.modifierFlags & NSControlKeyMask)
{
[NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self];
}
}
:このための最良の修正がコントロールクリックのためのあなたのトップレベルのビュー(あなたNSBoxサブクラス)で明示的にあなたのコンテキストメニューを表示することです、私を見つけましたサブビューツリー全体の操作やトラバースを回避し、より問題の多い副作用/バグが発生する可能性があります。
私はテーブルの中で同じものを持っています...私は何を見つけるかを教えてくれます。 –