我有一个包含几个子视图的视图:
mainView
subViewA
subViewB
SubViewC
mainView
是一个由nib构造的NSView
,由NSViewController
子类控制。子视图是标准视图,例如NSTextField
和NSImageView
,并且配置为不可编辑。即使在其中一个子视图中触发了事件,我也希望mainView
能够接收rightMouseDown:
。
rightMouseDown:
中NSResponder
的默认实现将事件传递给下一个响应者,但NSView
更改了默认行为,但未将其传递给下一个响应者。
我可以将所有子视图子类化,但这似乎不是一个非常优雅或可维护的解决方案。
如何在不对所有子视图进行子类化的情况下,让子视图将rightMouseDown:
消息传递给下一个响应者?
答案 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
添加一个子视图,我称之为clickCatcher
。 clickCatcher
是透明的,大小与mainView
相同,并且会被添加,以便它是最顶层的视图:
[self addSubview:clickCatcher positioned:NSWindowAbove relativeTo:nil];
XXXmouseDown:
调用clickCatcher
的{{1}}方法。