0

我已经尝试了其他帖子中建议选项的多种组合,但我似乎无法获得一个基于单元格的 NSTableView,其中填充了不可编辑的 NSTextFieldCell 来选择 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;

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

执行此操作以强制单元格以选择突出显示颜色绘制其背景的唯一方法是吗?(似乎很骇人听闻)。

顺便说一句,也允许选择列。目前有效。

有人对这个问题有任何经验吗?还是一些圣人的猜测?

斯蒂芬

4

1 回答 1

2

听起来您正在尝试制作电子表格。那不是表格视图。

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

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

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

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

你最好实现自定义视图。模拟 NSTableView 的数据源协议可能会做得很好——spreadsheetView:objectValueForColumnIndex:rowIndex:例如,你可以有——但除此之外,你还有很多工作要做,特别是要实现编辑。

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

于 2013-12-27T20:43:24.630 回答