我正在尝试在Cocoa中创建一个基于列视图的NSTableview。我希望表的第一行是一个组行,我将NSTableRowView子类化为一个透明的组行。 到现在为止还挺好。然后我希望第二行是一个包含一些内容的自定义单元格。第三行应该再次成为一个组行(表示新节的开始)。
以下是我的tableview的委托方法的代码:
- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row
{
if ((row == 0) || (row == 2)) return YES;
return NO;
}
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
TransparentGroupRowView *rowView = [[TransparentGroupRowView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
return rowView;
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
if (row == 0) {
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"headerCell" owner:self];
cellView.textField.stringValue = @"Propagation Dimension";
return cellView;
} else if (row == 1) {
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"propagationDimensionCell" owner:self];
if (self.geometry.propagationDimension) cellView.textField.stringValue = self.geometry.propagationDimension;
return cellView;
} else if (row == 2) {
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"headerCell" owner:self];
cellView.textField.stringValue = @"Transverse Dimensions";
return cellView;
}
}
不幸的是,结果是第一行被绘制在第二行之上。而不是第一行,我得到一个空的空间。 这是一种甚至更奇怪的行为。如果我为第一行的方法isGroupRow返回NO,它会显示在正确的位置,但显然它看起来与我想要的不同。
在我看来,这似乎是一个指针问题,但我看不出问题所在。
如您所见,横向尺寸正确显示透明背景。而是在第二行(灰色)的顶部绘制传播尺寸。顶部的空白区域是第一组行(传播维度)的位置。