objective-c – mouseDragged事件被另一个视图窃取

我在另一个NSView中有几个类MyView(NSView的子类)的视图. MyView实现-mouseEntered:, – mouseExited:, – mouseDown:, – mouseDragged:和-mouseUp:.

几乎总是,当MyView收到鼠标按下事件时,所有后续鼠标拖动的事件都会被同一个MyView接收,直到下一个鼠标按下事件.即使光标超出了MyView.这是预期的行为.

有时,MyView将接收鼠标按下事件,但只有当光标保留在MyView内时才会接收鼠标拖动和鼠标按下事件.如果光标移动到另一个MyView,则MyView开始接收鼠标拖动事件(没有先接收鼠标按下事件)并且可以接收后续的鼠标按下事件.

如果它很重要,鼠标按下事件会在MyView的顶部创建一个FooView(NSView的子类),鼠标拖动的事件会调整FooView的框架大小.这可能是相关的,因为我只能在创建其中一个FooView后重现问题. FooView没有实现任何鼠标事件方法.

我一直在搞乱这一段时间,并且无法在一个简单的例子中故意重现问题或重新创建问题.我很乐意回答有关我的代码的任何问题,我只是不确定发布的相关部分是什么.

最佳答案 不确定根本问题是什么(这个
Cocoa行为似乎与我不一致)……但这里有一个可能的解决方法:

>在superview中,创建一个实例变量,跟踪发生-mouseDown:的MyView实例.
>当您在MyView中收到-mouseDragged:而不是在self上操作时,操作存储在superview中的MyView实例引用.

…然后,您将能够始终跟踪正在拖动的对象,而无需运行自己的事件循环.

点赞