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