mouseDragged未在NSView的框架外调用

时间:2012-10-16 12:07:56

标签: objective-c cocoa nsview

我很难理解为什么当鼠标放在视图之外时,为我的一个NSView子类调用mouseDragged而不是另一个调用。

子类1以编程方式添加到NSWindow,然后将其作为子窗口添加到主应用程序窗口。当在视图内单击鼠标并拖动鼠标时,即使鼠标移出视图的框架,鼠标拖动也会继续被调用。这就是我想要发生的事情。

子类2在XIB文件中分配给应用程序主窗口中的自定义视图对象。在这种情况下,mouseDragged事件仅在鼠标保留在视图内时触发。

我遗失了哪些明显的东西?

1 个答案:

答案 0 :(得分:0)

我经历了类似的事情,但是在每个窗口中它都是相同的NSView子类。一个(在父窗口中)按预期工作。另一个(在子窗口中)仅在鼠标悬停在视图上方时才能看到mouseDragged。

事实证明,原因是在与问题视图相同的视图中有一个NSImageView,但有重叠。因为NSImageView仅在部分范围内绘制图像,所以这从来不是问题,但是事实证明,这是导致视图跟踪出现问题的原因。

我调整了添加NSImageView的方式以将其放置在子视图的底部:

[parentView addSubview:myImageView positioned:NSWindowBelow relativeTo:nil];

有问题的视图也已经在parentView中,因此addSubview:在有问题的视图上方添加了myImageView。

这为我解决了这个问题。