我有一个基于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/