NSTableView:创建“重叠”行

时间:2016-07-18 22:58:28

标签: objective-c cocoa nstableview appkit nstablerowview

目标

我的应用程序中有一个NSTableView,我想绘制“重叠”行来创建一个像Automator.app中那样的“连接”效果:

screenshot of automator app

我正在尝试

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

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

有没有人知道是否有一种不同的,规范的方式来实现Automator tableView的效果?

1 个答案:

答案 0 :(得分:4)

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

Apple的HoverTableDemo sample说明了一些技巧,WWDC 2011 session 120 video“基于视图的NSTableView Basic to Advanced”更详细地描述了它们。

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

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

您可以使用NSTableView的自定义sublcass来自行结束之外的网格自定义绘制,如果您需要,可能只是最后一行底部的箭头。您可以覆盖-drawGridInClipRect:来执行此操作。