我有一个带有嵌套 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/