【问题标题】:Single NSTableView with multiple data sources具有多个数据源的单个 NSTableView
【发布时间】:2012-04-30 15:35:20
【问题描述】:
让两个数据源填充一个 NSTableView 在逻辑上是否有意义?还是弹出按钮(可以选择读取哪个数据源)更合理?
如果我使用单个 NSTableView 选项,如果我将所有数据输入到单个数据源(例如 NSDictionary)然后填充表格,我会更好吗?我看到这个想法的唯一问题是完成表格选择后会发生什么。我将如何破译选择了哪个原始位置。
另一个突然出现在我脑海中的想法/潜在问题......如果我从数据源获取数据并直接填充表格,如何在相关的 NSTableView 'count' 方法中给出表格的计数..将数据存储 1 和数据存储 2 的计数相加可以吗?
对不起,如果有点混乱..感谢您的任何意见!
【问题讨论】:
标签:
objective-c
cocoa
nstableview
【解决方案1】:
您绝对可以使用多个数据源来将数据显示在表格视图中,但它们都必须通过单个控制器对象进行汇集,该控制器对象被分配为表格视图的datasource 并实现了NSTableViewDatasource 协议.
您必须在控制器对象中编写一些代码,以便跟踪组成的多个源数组,并为表视图提供项目数量和每个项目内容的适当值。
这是一个非常简单的例子:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [array1 count] + [array2 count];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
if(rowIndex >= [array1 count])
{
return [array2 objectAtIndex:rowIndex - [array1 count]];
}
else
{
return [array1 objectAtIndex:rowIndex];
}
}
至于选择,您的控制器知道它从哪里获取数据,因此当用户选择特定行时,将该行索引转换为您的一个后备存储中的匹配对象应该是微不足道的。
【解决方案2】:
根据您的应用程序逻辑,这可能是有意义的。最简单的方法是为每个表格部分设置不同的来源。然后,您可以使用节号作为数据库的选择器。