0

我正在尝试在 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,它会显示在正确的位置,但显然它看起来与我想要的不同。

在我看来,这几乎是一个指针问题,但我看不出问题出在哪里。

如您所见,横向尺寸以透明背景正确显示。 传播维度被绘制在第二行(灰色)的顶部。 顶部的空白区域是第一组行(传播维度)应该在的位置。

如您所见,横向尺寸以透明背景正确显示。传播维度被绘制在第二行(灰色)的顶部。顶部的空白区域是第一组行(传播维度)应该在的位置。

4

0 回答 0