NSTableRowView"空行"

时间:2015-04-12 04:56:09

标签: objective-c cocoa

我已经覆盖了NSTableRowView,到目前为止它正在努力。我面临的问题是为空行绘制分隔符。

drawSeparatorInRect:dirtyRect

似乎只覆盖了包含内容的行,其余部分似乎都填充了系统颜色。

目前我有:

-(void)drawSeparatorInRect:(NSRect)dirtyRect
{
    NSRect sepRect = self.bounds;


    sepRect.origin.y = NSMaxY(sepRect) - 1;
    sepRect.size.height = 1;
    sepRect = NSIntersectionRect(sepRect, dirtyRect);
    if (!NSIsEmptyRect(sepRect))
      {
        [[NSColor gridColor] set];

        NSRectFill(sepRect);


      }
}

正如我所说的那样效果很好。我最初是从一些苹果样本中选择的。

当我将分隔符颜色更改为“红色”时,您可以看到会发生什么:

enter image description here

最后一个填充行的下半部分被填充,但之后的其他行都没有填充。

有没有人知道我错过了什么?

干杯,

A

1 个答案:

答案 0 :(得分:2)

对于包含内容的行,只有行视图。因此,自定义行视图不会影响超出表格内容末尾的行的分隔符的绘制。

要自定义这些分隔符的绘图,您需要覆盖-[NSTableView drawGridInClipRect:]。您可以计算分隔符的位置,以查看超出内容结尾的行的位置,并以与自定义行视图相同的方式绘制。

WWDC 2011 Session 120 – View Based NSTableView Basic to Advanced的视频中使用示例代码对此进行了解释。它也在Apple的HoverTableDemo sample project中得到了证明。