Objective c NSTableView:Create";重叠“;排 目标

Objective c NSTableView:Create";重叠“;排 目标,objective-c,cocoa,nstableview,appkit,nstablerowview,Objective C,Cocoa,Nstableview,Appkit,Nstablerowview,我的应用程序中有一个NSTableView,我希望绘制“重叠”行,以创建类似Automator.app中的“连接”效果: 我在尝试什么 我正在考虑的方法是使用NSTableView的-(NSRect)FrameOfcellaColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex方法来增加第一行之后所有行的Y原点。我的tableView基于视图,不使用自动布局 我的问题是:这是实现这一效果的正确方法吗?让tableView使用重叠的框架绘制行

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


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

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


有人知道有没有一种不同的、规范的方法可以从Automator tableView中获得效果吗?

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

苹果演示了一些技术,“基于视图的NSTableView从基本到高级”对它们进行了更详细的描述

我想您应该设置表视图的
intercellSpacing
以适应连接点图像大小。您应该设置
gridStyleMask
以包括
nstableviewssolidhorizontalgridlinemask

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


您可以使用
NSTableView
的自定义子类对行末尾以外的网格进行自定义绘制,如果需要的话,这可能只是最后一行底部的箭头。您可以覆盖
-drawGridInClipRect:

与其让单元格重叠,不如只包含网格的顶端背景图像中的三角形是圆形顶部的单元格。这产生了一种重叠的错觉,没有我考虑过的那种复杂性。但当我看Automator时,苹果肯定不是这样做的。如果你拖动其中一行,很明显三角形和半圆本身就是单元格视图的一部分选择高光还围绕三角形/半圆绘制了一个漂亮的蓝色边框,该边框自然延伸到单元格的边框中。而且,由于单元格是“可折叠的”在Automator和我的应用程序中,计算在后台进行假绘制的精确点变得非常困难。但问题是,你没有理由相信Automator使用的是表视图,而不是(比如)自定义视图堆叠视图。因此,询问如何使用表视图复制该视图的建议会束缚潜在响应者的手脚。没错,我无法证明它不是另一个类。但它具有NSTableView的所有机制。当你拖动一行时,该行突然“捕捉”如果没有重叠的话,它会被放置在哪里。这让我相信有一些巫术正在进行,只是调整画面。关于我为什么不走这条路线,请参阅对原始问题的评论。(这也是我的第一个想法。)