0

我在创建具有 2 列的 NSTableView 时遇到了问题。

如何设置一行对应列的值?我想必须colText在行的列中,但这似乎几乎不可能实现。

这是代码:

 - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {
    uint32_t size = *((uint32_t *)[[itemSizes objectAtIndex:rowIndex] bytes]);
    NSString *colText = [NSString stringWithFormat:@"%d bytes", size];

    return [objNames objectAtIndex:rowIndex];
}

我想[objNames objectAtIndex:rowIndex]在左边栏,它是,colText在右边?

我有点卡住了。

任何帮助表示赞赏。

4

3 回答 3

2

给出列标识符(例如@"firstColumnID" 和@"secondColumnID"),以便您可以执行以下操作:

- (id)tableView:(NSTableView *)aTableView 
      objectValueForTableColumn:(NSTableColumn *)aTableColumn 
      row:(NSInteger)rowIndex
{
    if ([[aTableColumn identifier] isEqualToString: @"firstColumnID"])
        return [objNames objectAtIndex: rowIndex];
    else 
    {
        // In the original code, NSData was used, but for simple values
        // like this, NSNumbers are better suited, IMO:
        NSUInteger size = [[itemSizes objectAtIndex: rowIndex] unsignedIntegerValue];
        return [NSString stringWithFormat: @"%lu bytes", size];
    }
}
于 2011-08-20T06:00:32.127 回答
0

两种选择:

  • 更新您的代码和用户界面以使用绑定:添加方法 -formattedSize,然后将 NSArrayController 添加到 NIB,将数组控制器绑定到您的数据数组,然后将表列绑定到排列对象.描述和排列对象.格式设置。

  • 或者使用 NSTableColumn 来区分返回的数据。

例如

- (id)tableView:(NSTableView *)tableView
      objectValueForTableColumn:(NSTableColumn *)tableColumn
      row:(int)row
{
    id value = nil;

    if ([[tableColumn identifier] isEqualToString:@"column1"])
    {
        value = [arrayA objectAtIndex:row];
    }
    else
    {
        value = [arrayB objectAtIndex:row];
    }

    return value;
}
于 2011-08-20T05:47:52.210 回答
0

另一种选择,使用更少的编码并且没有绑定,是将列标识符设置为与类属性相同。在这种情况下,您可以省去 if/else。

这里有更多关于这个主题的信息:

具有多列的 NSTableView

于 2012-11-02T00:21:22.323 回答