我有一个包含两个视图的窗口:

出于不同的目的,影片视图和控制器视图都会覆盖mouseDown:和mouseUp: (影片视图具有目标和动作,并作为按钮进行反应,而控制器查找并支持拖动)。
不同之处在于,当我在电影视图中单击时--如截图所示,电影视图通常足够大,以至于看不到它,而不是击中控制器视图-- mouseDown:和mouseUp:消息被发送到控制器视图!电影视图永远不会收到这两条消息。
我没有在电影视图或它的父视图(这是一个普通的NSView)中重写hitTest:,只是在控制器视图中重写(原因是我在该视图上有一个跟踪区域-我的实现只是返回self,它是控制器视图)。
那么,这是怎么回事?
发布于 2013-02-21 14:41:14
您可能已经猜到了:这是我在控制器视图中的hitTest:实现。
事实证明,hitTest:不仅被发送到鼠标所在的框架所在的视图;它还被发送到窗口中的每个视图,甚至是在鼠标单击的两端都不在鼠标附近的视图。
因此,在覆盖hitTest:时,请确保您验证了该点实际上就在您自己内部。最简单的方法是发送[super hitTest:thePoint],如果结果不是nil,则只执行自定义的命中测试。(除非您想从窗口中的其他视图窃取单击。)
https://stackoverflow.com/questions/14996098
复制相似问题