基于视图的NSTableview的奇怪行为(跳过行)

时间:2012-07-26 07:55:15

标签: objective-c cocoa nstableview

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

在我看来,这似乎是一个指针问题,但我看不出问题所在。

As you see transverse dimension is displayed correctly with a transparent background. Propagation dimension is drawn instead on top of the second row (grey). The blank space on top is where the first group row (propagation dimension) should be.

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

0 个答案:

没有答案