如何设置NSTableView的第二列文本?

时间:2011-08-20 05:39:24

标签: objective-c cocoa nstableview nstablecolumn

我在创建包含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

我有点卡住了。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:0)

两个选项:

  • 更新代码和用户界面以使用绑定:添加方法-formattedSize,然后将NSArrayController添加到NIB,将数组控制器绑定到数据数组,然后将表列绑定到arrangeObjects.description和arrangedObjects.formattedSize。

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

e.g。

- (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;
}

答案 2 :(得分:0)

另一个选项,编码较少且没有绑定是将列标识符设置为与类属性相同。在这种情况下你可以免除if / else。

这里有更多关于这个主题的内容:

NSTableView with multiple columns