我有一个非常简单的问题,我找不到简单的答案。当使用可可(osx,xcode)和一个名为“mouseDown”的方法来检测鼠标是否点击了视图时,如何检测鼠标点击了哪个对象?我只需要一个类名,这样我就可以知道用户是否点击了,例如 NSImageView、WebView、NSTextView 还是它自己的 NSView?或者更好的是,如果我的 NSView 上有两个 NSImageView,如何检测点击了哪个?
干杯。
我有一个非常简单的问题,我找不到简单的答案。当使用可可(osx,xcode)和一个名为“mouseDown”的方法来检测鼠标是否点击了视图时,如何检测鼠标点击了哪个对象?我只需要一个类名,这样我就可以知道用户是否点击了,例如 NSImageView、WebView、NSTextView 还是它自己的 NSView?或者更好的是,如果我的 NSView 上有两个 NSImageView,如何检测点击了哪个?
干杯。
在您的视图 mouseDown 方法中,您可以调用 hitTest: 方法来获取被点击的视图层次结构中接收者的最远后代:
因此,在您的视图子类中,您可以执行以下操作:
- (void)mouseDown:(NSEvent *)theEvent
{
id clickedObject = [self hitTest:[theEvent locationInWindow]];
if ([clickedObject isKindOfClass:[NSImageView class]]) {
NSLog(@"Clicked an ImageView");
} else if ([clickedObject isKindOfClass:[WebView class]]) {
NSLog(@"Clicked a WebView");
}
}
不过,您的问题似乎有点奇怪,因为通常您不需要自己进行此命中测试。
如果您试图在单击特定图像时获得单击事件,更好的方法是使用带有图像集的无边框按钮,然后实现一个操作方法并将其连接到按钮。