捕获子视图的鼠标按下事件。(Cocoa osx)

4

我有一系列嵌套的视图,需要捕获鼠标点击事件,并在选择其中任何一个视图时执行相同的操作。有没有一种方法可以告诉父视图处理其子视图的事件?最好的处理方式是将一个透明视图放在所有其他视图的顶部,并让该视图处理事件吗?


NSResponder中的默认mouseDown:已经将事件转发给了下一个响应者。你的子视图是哪些类?你能编辑它们吗,还是预定义的(如UI控件等)? - Chris Johnsen
我的子视图是自定义的NSViews。 - Mike2012
3个回答

2
在父视图中,您可以重写hitTest方法,如果点在父视图的矩形内,则返回父视图。这将防止鼠标事件传递给任何子视图。
- (NSView *)hitTest:(NSPoint)aPoint
{
    return NSPointInRect(aPoint, self.frame) ? self : nil;
}

请注意,aPoint是在父视图的“frame”坐标系统中,而不是其边界坐标系统中。

2

您的子视图是否定义了自己的mouseDown:

如果它们尚未定义自己的-[… mouseDown:(id)event],那么它们应该已经将它们的事件传递给响应链,这将到达您的父视图。

否则,(除了它们需要处理的其他内容之外),它们需要决定哪些事件也应该传递给父视图,并为这些事件调用[super mouseDown:event]


0

这个版本适用于将以屏幕坐标表示的点进行转换:

NSPointInRect([view convertPoint:[[view window] convertScreenToBase:point] fromView:nil], [view bounds]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接