我有一个基于nstableview的视图。我想根据一些使用下面代码的条件为整个行着色

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
    NSTableRowView *view = [[NSTableRowView alloc] initWithFrame:NSMakeRect(1, 1, 100, 50)];

    [view setBackgroundColor:[NSColor redColor]];
    return view;;
}


调用了委托方法,但表似乎未使用委托方法返回的NSTableRowView

这里的主要目的是根据某种条件为整行着色。上面的实现有什么问题?

最佳答案

对于任何其他想要自定义NSTableRowView backgroundColor的人,有两种方法。


如果不需要自定义工程图,只需在rowView.backgroundColor中的- (void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row中设置NSTableViewDelegate

例:

- (void)tableView:(NSTableView *)tableView
    didAddRowView:(NSTableRowView *)rowView
           forRow:(NSInteger)row {

    rowView.backgroundColor = [NSColor redColor];

}

如果确实需要自定义绘图,请使用所需的NSTableRowView创建自己的drawRect子类。然后,在NSTableViewDelegate中实现以下内容:

例:

- (NSTableRowView *)tableView:(NSTableView *)tableView
                rowViewForRow:(NSInteger)row {
    static NSString* const kRowIdentifier = @"RowView";
    MyRowViewSubclass* rowView = [tableView makeViewWithIdentifier:kRowIdentifier owner:self];
    if (!rowView) {
        // Size doesn't matter, the table will set it
        rowView = [[[MyRowViewSubclass alloc] initWithFrame:NSZeroRect] autorelease];

        // This seemingly magical line enables your view to be found
        // next time "makeViewWithIdentifier" is called.
        rowView.identifier = kRowIdentifier;
    }

    // Can customize properties here. Note that customizing
    // 'backgroundColor' isn't going to work at this point since the table
    // will reset it later. Use 'didAddRow' to customize if desired.

    return rowView;
}

关于cocoa - 在基于View的NSTableview中为行着色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10910779/

10-12 02:00