我有一个 NSView 覆盖其父窗口的内容视图。该视图有一个单击事件处理程序,可将其从内容视图中删除。在这个观点之中,我还有另外一个观点。当我在此内部视图中拖动鼠标时,鼠标事件不仅会应用于前面的视图,还会应用于后面的视图。此外,后面视图中的光标也会显示出来。这与这里发生的问题相同:NSView 覆盖将鼠标事件传递给底层子视图? https://stackoverflow.com/questions/3522410/nsview-overlay-passes-mouse-events-to-underlying-subviews但那里的答案不适用于我的项目,因为我无法打开另一个窗口。
如果没有看到您的事件处理代码,很难知道发生了什么,但我怀疑您可能正在调用super
您的实现中各种事件处理方法的实现。
NSView
是一个子类NSResponder
,因此默认情况下未处理的事件会沿着响应者链向上传递。视图的超级视图是响应者链中的下一个对象,因此,例如,如果您调用:[super mouseDown:event]
在你的实施中‑mouseDown:
,事件将被传递到超级视图。
修复是为了确保您don't call super
的事件处理程序中的实现。
这是不正确的:
- (void)mouseDown:(NSEvent*)anEvent
{
//do something
[super mouseDown:event];
}
这是对的:
- (void)mouseDown:(NSEvent*)anEvent
{
//do something
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)