目标

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

objective-c - NSTableView:创建“重叠”行-LMLPHP



我在想什么

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

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

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

最佳答案

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

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

我认为您应该设置表格视图的intercellSpacing来容纳连接点图像的大小。您可以将gridStyleMask设置为包括NSTableViewSolidHorizontalGridLineMask

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

您可以使用NSTableView的自定义sublcass在行的末尾进行网格的自定义绘制,如果需要的话,它可能只是最后一行底部的箭头。您可以覆盖-drawGridInClipRect:来做到这一点。

关于objective-c - NSTableView:创建“重叠”行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38447196/

10-12 05:41