cocoa - 拖动时未在嵌套 View 上调用 NSView mouseEntered - 黑客攻击是唯一的选择吗?

标签 cocoa mouseevent drag nsview

我有一个带有嵌套 NSView 的 NSView,如果我不拖动鼠标,则使用 NSTracking 区域在所有 subview 上触发鼠标事件...很好。

但是当我从父 NSView 拖动到子 NSView 上时,鼠标事件不会被触发,然后我让它们响应事件的唯一方法是通过黑客攻击,这感觉很脏。

NSView *hit = [self findViewUnderPoint:loc];
if (hit != nil)
{
    if (hit != last)
    {
        [last mouseExited:event]; // This looks terrible to me
    } else {
        [hit mouseEntered:event]; // This looks terrible to me
    }
    last = hit;
}

如果你注释掉上面的代码, subview 事件就不会被触发,如果你把它留在里面,它们就会......但我直接调用它们。

我上传了一个视频,首先向您展示它是如何工作的,然后是拖动(使用我的技巧) - 我还包含了我的源代码。

我理想地追求“正确的方式”这样做

https://www.dropbox.com/s/b6ps8tz0jvg2gwy/Designable.zip?dl=0

最佳答案

Handling Mouse Dragging Operations 中所述,有两种方式实现拖动。您的解决方案使应用程序的正常事件循环短路,您必须调用 mouseEntered:mouseExited:。如果您不想这样做,请实现具有其他缺点的三方法方法。

关于cocoa - 拖动时未在嵌套 View 上调用 NSView mouseEntered - 黑客攻击是唯一的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494052/

相关文章:

drag-and-drop - QML 拖放机制可以在不移动拖动项的情况下工作吗?

cocoa - NSImage w/BitmapImageRep -> CIImage 反转颜色 -> NSImage w/BitmapImageRep,色彩空间问题

cocoa - Mac 应用程序禁用 Xcode "Build and Archive"按钮。为什么?

macos - 我的 NSTableView 表中的选择没有突出显示

objective-c - 当应用程序未激活时如何观察键盘输入事件

android - 以与用户手指在布局上移动相同的速度更改相对布局的高度

javascript - 将文件从桌面拖到浏览器时在 'dragenter' 上显示覆盖

javascript - 鼠标单击对象数组javascript Canvas

c# - 使用 C# 实现鼠标自动化

javascript - 在 jQuery 中,如何以百分比设置元素的位置?