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

时间:2013-12-27 05:20:37

标签: macos cocoa nstableview appkit nstextfieldcell

我尝试了其他帖子中的众多建议选项组合,但我似乎无法使用不可编辑的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;

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

唯一的方法是强制单元格在选择高亮颜色中绘制背景吗? (似乎是hackish)。

BTW,也允许COLUMN选择。这目前有效。

任何人都有过这方面的经验吗?或者一些圣人的猜测?

斯蒂芬

1 个答案:

答案 0 :(得分:1)

听起来你正在尝试制作电子表格。这不是桌面视图。

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

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

电子表格是非常不同的。每个细胞都是彼此的同伴;两个轴都不一定从属于另一个轴。电子表格可以用作表格(例如:项目,价格,数量,小计),但不是绑定到 NSTableView的属性属性范例。< / p>

NSTableView的API证实了这一点。请注意,表格视图包含selectedRowIndexesselectedColumnIndexes,但无法枚举用于识别所选单个单元格的列,行对。

您最好实现自定义视图。您可能很好地模拟NSTableView的数据源协议 - 例如,您可以spreadsheetView:objectValueForColumnIndex:rowIndex: - 但是,您需要做很多工作,特别是要实现编辑。

长期来看,这是最好的方式,也是获得个体细胞选择的唯一途径。