2

いくつかのサブビューを含むビューがあります。

mainView
    subViewA
    subViewB
    SubViewC

mainViewNSViewペン先から構築され、サブクラスで制御されますNSViewControllerNSTextFieldサブビューは、やなどの標準ビューでありNSImageView、編集できないように構成されています。いずれかのサブビューでイベントがトリガーされた場合でもmainView受信したい。rightMouseDown:

rightMouseDown:inのデフォルトの実装はNSResponder、イベントを次のレスポンダーにNSView渡しますが、デフォルトの動作を変更し、次のレスポンダーに渡しません。

すべてのサブビューをサブクラス化することはできますが、これは非常にエレガントで保守可能なソリューションのようには思えません。

rightMouseDown:すべてのサブビューをサブクラス化せずに、サブビューを取得して次のレスポンダーにメッセージを渡すにはどうすればよいですか?

4

3 に答える 3

1

これは通常、スーパービューの-hitTest:メソッドをオーバーライドすることによって達成されますか?

于 2010-06-06T16:28:07.653 に答える
0

mainView私の解決策は、私が呼び出した にサブビューを追加することclickCatcherです。clickCatcher透明でサイズが同じでmainView、一番上に表示されるように追加されます。

[self addSubview:clickCatcher positioned:NSWindowAbove relativeTo:nil];

callのXXXmouseDown:メソッド。clickCatchersuperview

于 2010-06-05T16:27:48.350 に答える
0

NSApplication の - (void)sendEvent をオーバーライドします。

- (void)sendEvent:(NSEvent *)event {
  if([event type]== NSRightMouseDown)
    redirect to wherever
  else
    [super sendEvent:event];
}
于 2010-06-03T12:05:08.007 に答える