鼠标事件通过NSView流血

Maz*_*Maz 6 cocoa nsevent nsview

我有一个NSView,它涵盖了它的父窗口的内容视图.此视图具有单击事件处理程序,可将其从内容视图中删除.在这个视图中,我有另一种观点.当我在此内部视图中拖动鼠标时,鼠标事件不仅应用于前面的视图,还应用于后面的视图.此外,背后视图中的游标也会出现.这是同样的问题:NSView overlay将鼠标事件传递给基础子视图?但那里的答案对我的项目不起作用,因为我无法打开另一个窗口.

谢谢.

Rob*_*ger 14

如果没有看到您的事件处理代码,就很难知道发生了什么,但我怀疑您可能正在调用super实现中各种事件处理方法的实现.

NSView是一个子类NSResponder,因此默认情况下,未处理的事件会在响应程序链中传递.视图的超级视图是响应者链中的下一个对象,因此,例如,如果您[super mouseDown:event]在实现中调用?mouseDown:,则事件将被传递给超级视图.

修复是为了确保您不在super事件处理程序中调用实现.

这是不正确的:

- (void)mouseDown:(NSEvent*)anEvent
{
    //do something
    [super mouseDown:event];
}
Run Code Online (Sandbox Code Playgroud)

这是对的:

- (void)mouseDown:(NSEvent*)anEvent
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)