我在基于视图的NSTableView中通过覆盖NSTableRowView
的{{1}}来自定义交替行颜色。这在很大程度上起作用,因为单元格本身的颜色会发生变化,但它显然不会影响表格视图本身的背景(例如,当滚动视图被弹回时)。截图:
定制此内容的最佳方法是什么?我posted a question之前关于这个问题但是使用基于单元格的表格视图。我找到的解决方案似乎不适用于基于视图的表视图。
答案 0 :(得分:3)
您是否尝试覆盖NSTableView的drawBackgroundInClipRect:(NSRect)clipRect
答案 1 :(得分:2)
有一段视频“基于视图的NSTableView Basic to Advanced”(可用here),其中绘制了最后一行下方的背景。
为了扩展该技术,您可以创建NSTableView的子类并添加一些代码:
// somewhere in your setup code (colors just intended as examples):
tableView.colors = [NSArray arrayWithObjects: [NSColor lightGrayColor],[NSColor grayColor], nil];
// In the table view subclass:
-(void)drawBackgroundInClipRect:(NSRect)clipRect
{
// The super class implementation obviously does something more
// than just drawing the striped background, because
// if you leave this out it looks funny
[super drawBackgroundInClipRect:clipRect];
NSRect boundsToDraw = clipRect;
CGFloat yStart = 0;
NSInteger rowIndex = -1;
if ( clipRect.origin.y < 0 ) {
while (yStart > NSMinY(boundsToDraw)) {
CGFloat yRowTop = yStart - self.rowHeight;
NSRect rowFrame = NSMakeRect(0, yRowTop, boundsToDraw.size.width, self.rowHeight);
NSUInteger colorIndex = rowIndex % self.colors.count;
NSColor *color = [self.colors objectAtIndex:colorIndex];
[color set];
NSRectFill(rowFrame);
yStart -= self.rowHeight;
rowIndex--;
}
}
}
答案 2 :(得分:-1)
我没试过但如果你只是覆盖-drawRect会发生什么:?