Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 捕获子视图的鼠标向下事件。(可可osx)_Cocoa_Macos_Mouse_Mouseevent - Fatal编程技术网

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

Cocoa 捕获子视图的鼠标向下事件。(可可osx),cocoa,macos,mouse,mouseevent,Cocoa,Macos,Mouse,Mouseevent,我有一系列嵌套视图,我需要捕获mouseDown事件,并在选择这些视图时执行相同的操作。有没有办法告诉superview为其子视图处理事件?处理此问题的最佳方法是将透明视图置于所有其他视图之上,并让此视图处理事件吗?您的子视图是否定义了自己的鼠标向下: 如果他们还没有定义自己的-[…mouseDown:(id)event],那么他们应该已经将事件传递到响应程序链,该链应该会到达superview 否则,(除了他们需要做的任何其他处理外)他们需要决定superview还应该接收哪些事件并调用这些事

我有一系列嵌套视图,我需要捕获mouseDown事件,并在选择这些视图时执行相同的操作。有没有办法告诉superview为其子视图处理事件?处理此问题的最佳方法是将透明视图置于所有其他视图之上,并让此视图处理事件吗?

您的子视图是否定义了自己的
鼠标向下:

如果他们还没有定义自己的
-[…mouseDown:(id)event]
,那么他们应该已经将事件传递到响应程序链,该链应该会到达superview


否则,(除了他们需要做的任何其他处理外)他们需要决定superview还应该接收哪些事件并调用这些事件的
[super mouseDown:event]

在superview中,如果点位于superview的矩形中,您可以覆盖hitTest以返回superview。这将阻止鼠标事件转到任何子视图

- (NSView *)hitTest:(NSPoint)aPoint
{
    return NSPointInRect(aPoint, self.frame) ? self : nil;
}

请注意,点位于superview的“框架”坐标系中,而不是其边界。

此版本用于转换以屏幕坐标表示的点:

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

nsrresponder中的默认
mouseDown:
已将事件转发给下一个响应程序。您的子视图是什么类?您可以编辑它们,或者是预定义的(UI控件等)?我的子视图是自定义视图。