我有一系列嵌套的视图,需要捕获鼠标点击事件,并在选择其中任何一个视图时执行相同的操作。有没有一种方法可以告诉父视图处理其子视图的事件?最好的处理方式是将一个透明视图放在所有其他视图的顶部,并让该视图处理事件吗?
我有一系列嵌套的视图,需要捕获鼠标点击事件,并在选择其中任何一个视图时执行相同的操作。有没有一种方法可以告诉父视图处理其子视图的事件?最好的处理方式是将一个透明视图放在所有其他视图的顶部,并让该视图处理事件吗?
- (NSView *)hitTest:(NSPoint)aPoint
{
return NSPointInRect(aPoint, self.frame) ? self : nil;
}
您的子视图是否定义了自己的mouseDown:
?
如果它们尚未定义自己的-[… mouseDown:(id)event]
,那么它们应该已经将它们的事件传递给响应链,这将到达您的父视图。
否则,(除了它们需要处理的其他内容之外),它们需要决定哪些事件也应该传递给父视图,并为这些事件调用[super mouseDown:event]
。
这个版本适用于将以屏幕坐标表示的点进行转换:
NSPointInRect([view convertPoint:[[view window] convertScreenToBase:point] fromView:nil], [view bounds]);
mouseDown:
已经将事件转发给了下一个响应者。你的子视图是哪些类?你能编辑它们吗,还是预定义的(如UI控件等)? - Chris Johnsen