我在创建包含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
?
我有点卡住了。
任何帮助表示感谢。
答案 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。
这里有更多关于这个主题的内容: