objective-c - mouseDown COCOA 下的对象

标签 objective-c xcode macos cocoa mouseevent

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

干杯。

最佳答案

在 View mouseDown 方法中,您可以调用 hitTest: 方法来获取被单击的 View 层次结构中接收器的最远后代:

因此,在您的 View 子类中,您可以执行以下操作:

- (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");
    }
}

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

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

关于objective-c - mouseDown COCOA 下的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178458/

相关文章:

ios - 如何仅查看具有特定主题标签的推文

c - 从锁定的 SQLite3 数据库中读取

swift - 如何删除具有特定名称 spritekit 的所有节点

ios - 在 Objective-C 中,如何以编程方式获取设备的 BuildID

ruby-on-rails - 每秒 MacOS 唤醒错误

iphone - iOS 默认文档文件

ios - 更改手动添加的 UINavigationBar 的右侧 BarButtonItem?

ios - ABAddressBookCopyArrayOfAllPeople 不返回任何人

python - 在 Mac 和 Windows 上的 python 中处理\r\n vs\n 换行符

macos - 第 3 方 Mac 开发者应用程序 : DEVELOPER NAME: no identity found