NSTableView中的自动表列标识符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSTableView中的自动表列标识符相关的知识,希望对你有一定的参考价值。
经过一些研究,我能够通过“标识符方式”填充NSTableView的一些日期,就像为每列分配唯一标识符一样。但是,我现在想如果有一种方法来填充NSTableView而不向列提供标识符以及如何?
为了更清楚 - 使用自动表列标识符,这里稍微描述:About the automatic table column identifier和我找到了一种方法如何通过这个表达式枚举或获取列的索引:
//in the objectValueForTableColumn blah blah blah method
int columnIndex = [[aTableColumn identifier] intValue];
return [[myArray objectAtIndex: rowIndex] objectAtIndex: columnIndex];
但是,事实是每列中的columnIndex等于0。 (我在NSTableView中有4个列)
能不能帮我看看如何在不设置标识符的情况下显示数据?非常感谢你!
首先,您不应该获取列的索引,因为可以拖动列,因此可以更改其索引。但是你可以这样做:
- (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];
}
}
另一种方法是检查表头单元格标题。使用此选项,您可以决定要在列中填充的值。类似的东西:(但在这里你需要手动设置列标题)
- (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;
}
你也可以选择Cocoa-Binding,这里不需要使用标识符!
编辑:
因为你没有类,所以你正在处理基本的C数组。但是委托返回id
所以你需要将它强制转换为某些Obj-C对象。在下面的情况下,我使用NSString
。看屏幕截图:
但是列标识符不是Integer
...因此你的“intValue”总是会带来0。
列标识符(无论是自动的,还是由用户在以编程方式或使用UI编辑器定义表时提供的)都是NSString
。它不仅用于查找NSColumn,还用于在NSUserDefaults
中自动保存列属性。
另一个错误的假设 - 列标识符与其索引有关。它不是。可以重新排列列(通过拖动它们或以编程方式),以便它们的索引可以更改。
所以 - 为了使你的代码示例适应列标识符 - 我建议你不要使用二维数组(包含行和列的索引),而是使用NSDictionary
作为每列信息,其中key(NSString
)将是列标识符,值 - 您需要的单元格的值。
所以:行的索引,列标识符的键,样本行看起来像这样:
//in the objectValueForTableColumn blah blah blah method
NSString columnIdentifier = [aTableColumn identifier];
return [[myArray objectAtIndex: rowIndex] valueForKey: columnIdentifier];
以上是关于NSTableView中的自动表列标识符的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中,如何从子查询中标识的表列名称中检索数据值?