是否有可能让一个NSView传递rightMouseDown:到没有子类化的下一个响应者?

时间:2010-06-03 09:50:43

标签: cocoa nsview appkit nsviewcontroller

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

mainView
    subViewA
    subViewB
    SubViewC

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

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

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

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

3 个答案:

答案 0 :(得分:1)

这通常是通过覆盖超级视图的-hitTest:方法来实现的吗?

答案 1 :(得分:0)

覆盖NSApplication的 - (void)sendEvent:

- (void)sendEvent:(NSEvent *)event {
  if([event type]== NSRightMouseDown)
    redirect to wherever
  else
    [super sendEvent:event];
}

答案 2 :(得分:0)

我的解决方案是在mainView添加一个子视图,我称之为clickCatcherclickCatcher是透明的,大小与mainView相同,并且会被添加,以便它是最顶层的视图:

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

XXXmouseDown:调用clickCatcher的{​​{1}}方法。