我已经尝试了其他帖子中建议选项的多种组合,但我似乎无法使用基于单元格的 NSTableView 填充不可编辑的 NSTextFieldCell 来选择单元格而不是行。
我已经尝试过:
[[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;
允许选择单元格(而不是编辑文本)的原因是我允许用户双击单元格来执行导航功能。双击效果很好,但用户应该能够看到单击(甚至第一次单击)选择了单元格。但我得到的只是被选择的行,即使委托(delegate)禁止这样做,也不会选择单元格。
执行此操作的唯一方法是强制单元格以选择突出显示颜色绘制其背景吗? (看起来很黑客)。
顺便说一句,也允许选择列。目前有效。
有人有解决这个问题的经验吗?或者一些明智的猜测?
斯蒂芬
最佳答案
听起来您正在尝试制作电子表格。这不是表格 View 。
表格 View 是一个项目列表,每行一个,显示每个项目的一个或多个方面,每列一个。
在这种情况下,仅选择但不编辑单个项目的一个属性几乎没有意义。它可能有一些用例(例如,在 iTunes 中仅选择和复制轨道的标题可能会很方便),但 NSTableView 和 NSOutlineView 无法容纳它。
电子表格是非常不同的东西。每个细胞都是对等的;两个轴都不一定从属于另一个轴。电子表格可以用作表格(例如:商品、价格、数量、小计),但不绑定(bind) NSTableView 的商品属性范例。
NSTableView 的 API 证实了这一点。请注意,表格 View 具有 selectedRowIndexes
和 selectedColumnIndexes
,但无法枚举可识别所选单个单元格的列、行对。
您最好实现自定义 View 。您可能会很好地模拟 NSTableView 的数据源协议(protocol) - 例如,您可以使用 spreadsheetView:objectValueForColumnIndex:rowIndex:
- 但除此之外,您还有很多工作要做,特别是实现编辑.
但从长远来看,这是获得单个细胞选择的最佳方法,也是唯一的方法。
关于macos - NSTableView:选择不可编辑的单元格而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20795222/