0

我有一个非常简单的问题,我找不到简单的答案。当使用可可(osx,xcode)和一个名为“mouseDown”的方法来检测鼠标是否点击了视图时,如何检测鼠标点击了哪个对象?我只需要一个类名,这样我就可以知道用户是否点击了,例如 NSImageView、WebView、NSTextView 还是它自己的 NSView?或者更好的是,如果我的 NSView 上有两个 NSImageView,如何检测点击了哪个?

干杯。

4

1 回答 1

1

在您的视图 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");
    }
}

不过,您的问题似乎有点奇怪,因为通常您不需要自己进行此命中测试。

如果您试图在单击特定图像时获得单击事件,更好的方法是使用带有图像集的无边框按钮,然后实现一个操作方法并将其连接到按钮。

于 2013-08-12T05:01:19.307 回答