Пользовательский фон в представлении NSTableView - PullRequest
6 голосов
/ 29 декабря 2011

У меня есть собственные чередующиеся цвета строк в моем NSTableView, основанном на представлении, путем переопределения NSTableRowView '-drawBackgroundInRect:.Это работает по большей части в том, что цвета самих ячеек меняются, но это, очевидно, не влияет на фон самого представления таблицы (например, когда представление прокрутки отклонено).Снимок экрана:

NSTableView background

Как лучше всего это настроить?Я ранее опубликовал вопрос об этой же самой проблеме, но с табличными представлениями на основе ячеек .Похоже, найденное мной решение не работает с табличными представлениями на основе представлений.

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Вы пытались переопределить NSTableView drawBackgroundInClipRect:(NSRect)clipRect

2 голосов
/ 02 мая 2012

Есть видео лекции "Просмотр на основе NSTableView Basic to Advanced" (доступно здесь ), в котором нарисован фон ниже последней строки.

Чтобы расширить эту технику, вы можете создать подкласс 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--;
        }
    }
}
0 голосов
/ 29 декабря 2011

Я не пробовал, но что произойдет, если вы просто переопределите -drawRect:?

...