cocoa - NSView 通过 NSTextView 接收点击事件

标签 cocoa nsview nstextview mouseclick-event

我在 NSView 中有一个不可编辑、不可选择的 NSTextView。我需要 NSView 在单击 TextView 时接收单击事件 - 基本上我需要单击事件就像 TextView 根本不存在一样。显然我只会使用

textView:clickedOnCell:inRect:atIndex:

TextView 委托(delegate)方法,但我需要捕获点击事件,以检测双击和类似的事情。

最佳答案

在包含 TextView 的 View 中,覆盖 the hitTest: method返回self。然后鼠标事件将被发送到容器 View 。

警告

我发现 hitTest: 将在窗口中任何地方的点击和鼠标跟踪事件中被调用,即使对于本来不会在任何地方的事件靠近容器 View 。如果窗口中还有其他 View ,您的 hitTest: 方法会将容器 View 变成一个黑洞,导致所有这些事件都被吸引到自身中,永远不会被任何其他 View 看到。

解决这个问题的方法是在吞下事件之前测试该事件是否在您的视野范围内。如果是,则返回self;如果不是,则返回nil

最简单的方法是调用 super 的实现,如果该点位于 View 内,它将返回 View 或其自身的任何 subview ,然后仅返回 self 如果该方法返回非nil。如果它返回 nil,那么您也返回 nil

一个不太简单但可能更有效的方法是 convert the point从窗口的坐标系到 View 的坐标系,然后使用 NSPointInRect 来测试该点是否在 View 的边界内。

关于cocoa - NSView 通过 NSTextView 接收点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133245/

相关文章:

cocoa - 如何对 CGPath 的绘图进行动画处理?

cocoa - Mac应用程序中轻松切换 "View Controllers"(与iOS类似)

iOS:找出小数位数

cocoa - NSCollectionView 类似延迟加载的行为

objective-c - NSView显示和隐藏SubView

swift - OSX Cocoa NSSearchField 清除按钮不响应点击

swift - 如何在 NSTextView 周围绘制边框

cocoa - 如何格式化/着色 NSTextView 字符串的技术

cocoa - NSTextView换行段落样式

cocoa - 是否可以让 NSView 传递 rightMouseDown : to the next responder without subclassing?