gpt4 book ai didi

objective-c - mouseDragged 事件被另一个 View 窃取

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:46 28 4
gpt4 key购买 nike

我在另一个 NSView 中有几个类 MyView(NSView 的子类)的 View 。 MyView 实现 -mouseEntered:, -mouseExited:, -mouseDown:, -mouseDragged:-mouseUp:

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

偶尔,MyView 会收到鼠标按下事件,但只会在光标停留在 MyView 内时收到鼠标拖动和鼠标弹起事件。如果光标移动到不同的 MyView 上,则该 MyView 开始接收鼠标拖动事件(无需先接收鼠标按下事件)并可以接收后续的鼠标松开事件事件。

万一重要,鼠标按下事件会在 MyView 之上创建一个 FooView(NSView 的子类),并且鼠标拖动事件调整 FooView 框架的大小。这可能是相关的,因为我只能在创建这些 FooView 之一后才能重现该问题。 FooView 没有实现任何鼠标事件方法。

我已经搞砸了一段时间了,一直无法有意地重现该问题或在一个简单的示例中重现该问题。我很乐意回答关于我的代码的任何问题,我只是不确定要发布的相关部分是什么。

最佳答案

不确定根本问题是什么(这种 Cocoa 行为对我来说似乎不一致)...但这是一种可能的解决方法:

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

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

关于objective-c - mouseDragged 事件被另一个 View 窃取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com