2

目标

我的应用程序中有一个 NSTableView,我想绘制“重叠”行以创建类似于 Automator.app 中的“连接”效果:

自动化应用程序的屏幕截图


我正在尝试什么

我正在考虑的方法是使用 NSTableView 的-(NSRect)frameOfCellAtColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex方法在第一行之后增加所有行的 Y 原点。我的 tableView 是基于视图的,它不使用自动布局。

我的问题是:这是实现这种效果的正确方法吗?让 tableView 绘制具有重叠帧的行似乎是“危险的”,我不知道这是否会导致 tableView 底部出现一堆额外的空白空间(因为 tableView 不会重叠在计算其整体高度时考虑框架;它只使用每行的 rowHeight 值的总和。)

有谁知道是否有不同的规范方式来实现 Automator tableView 的效果?

4

1 回答 1

4

正如 Patrick Goley 建议的那样,我认为您应该通过将连接点绘制为背景的一部分或表格视图分隔符来伪造它。

Apple 的HoverTableDemo 示例说明了一些技术,WWDC 2011 session 120 视频“View Based NSTableView Basic to Advanced”更详细地描述了它们。

我认为您会设置表格视图intercellSpacing以适应连接点图像的大小。您将设置gridStyleMask为包括NSTableViewSolidHorizontalGridLineMask.

您将使用自定义子类来自NSTableRowView定义绘制背景和分隔符(在行之间)。你会覆盖-drawBackgroundInRect:-drawSeparatorInRect:那些。

您将使用自定义子类在行NSTableView末尾之外进行网格的自定义绘制,如果您想要的话,这可能只是最后一行底部的箭头。你会覆盖-drawGridInClipRect:这样做。

于 2016-07-18T23:51:28.270 回答