我已经尝试了其他帖子中建议选项的许多组合,但我似乎无法使用不可编辑的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证明了这一点。请注意,表视图具有selectedRowIndexes
和selectedColumnIndexes
,但无法枚举用于标识所选单个单元格的列和行对。
您最好实现一个自定义视图。您可能最好模拟NSTableView的数据源协议——例如,您可以使用spreadsheetView:objectValueForColumnIndex:rowIndex:
——但除此之外,您还有很多工作要做,尤其是在实现编辑方面。
然而,从长远来看,这是最好的方法,也是获得单个细胞选择的唯一方法。