2

我有一个包含几个子视图的视图:

mainView
    subViewA
    subViewB
    SubViewC

mainViewNSView由 nib 构造的,并由NSViewController子类控制。子视图是标准视图,例如NSTextFieldNSImageView,并且配置为不可编辑。即使在其中一个子视图中触发事件,我也想mainView接收。rightMouseDown:

rightMouseDown:in的默认实现NSResponder将事件传递给下一个响应者,但NSView会更改默认行为并且不会将其传递给下一个响应者。

我可以对所有子视图进行子类化,但这似乎不是一个非常优雅或可维护的解决方案。

如何在rightMouseDown:不对所有子视图进行子类化的情况下让子视图将消息传递给下一个响应者?

4

3 回答 3

1

这通常是通过覆盖超级视图的-hitTest:方法来完成的?

于 2010-06-06T16:28:07.653 回答
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 回答
0

我的解决方案是向mainView我调用的子视图添加一个子视图clickCatcherclickCatcher是透明的,大小等于mainView并被添加,因此它是最顶部的视图:

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

调用XXXmouseDown:方法。_clickCatchersuperview

于 2010-06-05T16:27:48.350 回答