我正在使用带有自定义 NSTableRowView 的基于视图的 NSTableView。我想通过 drawBackgroundInRect 使用自定义行背景绘图,基于使用 trackingAreas 的鼠标位置。目标是为鼠标当前悬停的未选择行绘制自定义背景。
这与WWDC 2011 会话View Based NSTableView Basic to Advanced中的HoverTableView 示例几乎相同。您可以在右侧帐户类型表格视图的邮件、联系人和日历系统首选项窗格中看到该行为。
与示例不同,我的表格视图中有数千行。除非我快速滚动表格视图(例如,通过触控板用两指轻弹),否则一切都与示例中的一样。在这种情况下,似乎调用 updateTrackingAreas 的速度不够快。在鼠标下方滚动的行会突出显示,但不会通知鼠标离开其跟踪区域并因此保持突出显示。结果是显示鼠标悬停突出显示的多行,并且由于重用队列,这些行将滚动到表格视图的一端并重新出现在另一端(当然具有不同的数据)仍然突出显示,就好像它们被悬停一样. 慢慢滚动可以解决问题;但考虑到我希望滚动成千上万行,缓慢滚动并不是预期的用户行为。
我尝试了 NSTrackingAreaOptions 的各种组合都无济于事,现在我很难过。任何有关解决此问题的建议将不胜感激。