NSTableView 中的自动表列标识符

use*_*ser 3 cocoa objective-c nstableview

经过一番研究,我能够通过“标识符方式”用一些日期填充 NSTableView,就像为每列分配唯一标识符一样。但是,我现在想知道是否有一种方法可以在不向列提供标识符的情况下填充 NSTableView 以及如何实现?

更清楚的是 - 自动表列标识符的使用,这里稍微描述一下:关于自动表列标识符,并且我找到了一种如何通过此表达式枚举或获取列的索引的方法:

//in the objectValueForTableColumn blah blah blah method

int columnIndex = [[aTableColumn identifier] intValue];
return [[myArray objectAtIndex: rowIndex] objectAtIndex: columnIndex];
Run Code Online (Sandbox Code Playgroud)

然而,问题是每一列的columnIndex 都等于0。(例如,我在 NSTableView 中有 4 列)

您能帮助我如何在不设置标识符的情况下显示数据吗?非常感谢!

Ano*_*dya 6

首先,您不应该获取列的索引,因为可以拖动列,因此可以更改其索引。但是你可以这样做:

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{

    if ([tableView tableColumns][0] == tableColumn) {
        return [self.array[row] firstName];
    }
    else if ([tableView tableColumns][1] == tableColumn) {
        return [self.array[row] lastName];
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是检查表头单元格标题。使用它,您可以决定在该列中填充什么值。像这样:(但是这里你需要手动设置列标题)

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{

    NSCell *headerCell = [tableColumn headerCell];

    if ([[headerCell title] isEqualToString:@"First Name"]) {
        return [self.array[row] firstName];
    }
    else if ([[headerCell title] isEqualToString:@"Last Name"]) {
        return [self.array[row] lastName];
    }

    return nil;
}
Run Code Online (Sandbox Code Playgroud)

你也可以选择 Cocoa-Binding,这里不需要使用标识符!


编辑:

由于您没有课程,实际上您正在处理基本的 C 数组。但是委托会返回,id因此您需要将其类型转换为某个 Obj-C 对象。在以下情况下我使用NSString. 请参阅屏幕截图: 在此输入图像描述