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

objective-c – mouseDragged事件被另一个视图窃取,第1张

概述我在另一个NSView中有几个类MyView(NSView的子类)的视图. MyView实现-mouseEntered:, – mouseExited:, – mouseDown:, – mouseDragged:和-mouseUp:. 几乎总是,当MyView收到鼠标按下事件时,所有后续鼠标拖动的事件都会被同一个MyView接收,直到下一个鼠标按下事件.即使光标超出了MyView.这是预期的行为 我在另一个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实例引用.

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

总结

以上是内存溢出为你收集整理的objective-c – mouseDragged事件被另一个视图窃取全部内容,希望文章能够帮你解决objective-c – mouseDragged事件被另一个视图窃取所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1072287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存