NSTableView:选择不可编辑的CELLS而不是ROWS



我已经尝试了其他帖子中建议选项的许多组合,但我似乎无法使用不可编辑的NSTextFieldCell填充基于单元格的NSTableView来选择cell而不是行。

我试过:

[[col dataCell] setEditable:NO];
[[col dataCell] setSelectable:YES];
[col setEditable:YES];

和尝试过的代表:

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex;

- (BOOL)shouldFocusCell:(NSCell *)cell atColumn:(NSInteger)column row:(NSInteger)row;

允许选择单元格(而不编辑文本)的原因是我允许用户双击单元格以执行导航功能。双击效果很好,但用户应该能够看到单击(甚至第一次单击)就可以选择单元格。但我得到的只是被选中的行,即使代理禁止这样做,也没有单元格选择。

执行此操作的唯一方法是强制单元格以选定的高亮颜色绘制背景吗?(看起来很生气)。

顺便说一句,也允许选择COLUMN。这目前是有效的。

有人有这个问题的经验吗?还是一些明智的猜测?

Stephen

听起来像是在制作电子表格。这不是表视图。

表视图是一个项目列表,每行一个,显示每个项目的一个或多个方面,每列一个。

在这种情况下,只选择而不编辑单个项目的一个属性是没有意义的。它可能有一些用例(例如,在iTunes中只选择和复制曲目的标题可能很方便),但它不是NSTableView和NSOutlineView所能适应的。

电子表格是非常不同的东西。每个细胞都是彼此的对等体;两个轴都不一定从属于另一个轴。电子表格可以用作表格(例如:项目、价格、数量、小计),但不与NSTableView的项目属性范式绑定。

NSTableView的API证明了这一点。请注意,表视图具有selectedRowIndexesselectedColumnIndexes,但无法枚举用于标识所选单个单元格的列和行对。

您最好实现一个自定义视图。您可能最好模拟NSTableView的数据源协议——例如,您可以使用spreadsheetView:objectValueForColumnIndex:rowIndex:——但除此之外,您还有很多工作要做,尤其是在实现编辑方面。

然而,从长远来看,这是最好的方法,也是获得单个细胞选择的唯一方法。

相关内容

  • 没有找到相关文章

最新更新