NSView通过NSTextView接收点击事件

Chr*_*ris 7 cocoa nsview nstextview mouseclick-event

我在NSView中有一个NSTextView,不可编辑,不可选.我需要NSView在单击文本视图时接收单击事件 - 基本上我需要单击事件来表现为文本视图甚至不存在.显然我会使用

textView:clickedOnCell:inRect:atIndex:
Run Code Online (Sandbox Code Playgroud)

文本视图委托方法,但我需要捕获click事件,以检测双击和类似的事情.

Pet*_*sey 8

在包含文本视图的视图中,覆盖要返回hitTest:方法self.然后将鼠标事件发送到容器视图.

警告

我已经发现,在窗口的任何地方hitTest:都会调用点击和鼠标跟踪事件,即使对于那些自然不会在容器视图附近的事件也是如此.如果窗口中有其他视图,则您的方法会将容器视图转换为黑洞,导致所有这些事件都被吸引到自身中,永远不会被任何其他视图看到.hitTest:

解决方法是在吞咽之前测试事件是否在您的视图中.如果是,返回self; 如果不是,请返回nil.

最简单的方法是调用super实现,如果该点位于视图中,它将返回视图或其自身的任何子视图,然后self如果该方法返回非返回则返回nil.如果它返回nil,那么你也返回nil.

一种不太简单但可能更有效的方法是将点从窗口的坐标系转换为视图,然后用于NSPointInRect测试该点是否在视图内bounds.