Adrian Sluyters
Adrian Sluyters

Reputation: 2241

NSTableRowView "Empty Rows"

I've overridden NSTableRowView, which so far is working a treat. The problem I'm facing is drawing the separator for the empty rows.

drawSeparatorInRect:dirtyRect

only seems to override the rows that have content, all the rest seems to be filled with system colours.

At the moment I have:

-(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);


      }
}

Which, as I said works well. I originally picked this up from some apple sample.

When I change the separator color to "red", you can see what happens:

enter image description here

The bottom-half of the last populate row is filled, but none of the others there after are.

Has anyone got an idea what I'm missing?

Cheers,

A

Upvotes: 2

Views: 211

Answers (1)

Ken Thomases
Ken Thomases

Reputation: 90531

There are only row views for rows which have content. Therefore, a custom row view can not affect the drawing of separators for rows past the end of your table's content.

To customize the drawing of those separators, you need to override -[NSTableView drawGridInClipRect:]. You compute the position of the separator for where rows past the end of the content would be and draw the same way as your custom row view does.

This is explained, with example code, in the video for WWDC 2011 Session 120 – View Based NSTableView Basic to Advanced. It's also demonstrated in Apple's HoverTableDemo sample project.

Upvotes: 2

Related Questions