macos - NSTableView:选择不可编辑的单元格而不是行

标签 macos cocoa nstableview appkit nstextfieldcell

我已经尝试了其他帖子中建议选项的多种组合,但我似乎无法使用基于单元格的 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 具有 selectedRowIndexesselectedColumnIndexes,但无法枚举可识别所选单个单元格的列、行对。

您最好实现自定义 View 。您可能会很好地模拟 NSTableView 的数据源协议(protocol) - 例如,您可以使用 spreadsheetView:objectValueForColumnIndex:rowIndex: - 但除此之外,您还有很多工作要做,特别是实现编辑.

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

关于macos - NSTableView:选择不可编辑的单元格而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20795222/

相关文章:

cocoa - 使用每行不同的单元格(和数据类型)实现 NSOutlineView/NSTableView

objective-c - 多次调用 awakeFromNib

c - SDL2 Mac 文件处理

objective-c - 如何在内置输入(OSX Core音频/音频单元)上设置输入电平(增益)?

objective-c - 基于文档的应用程序+切换文档时更新字段/菜单/等?

macos - 为 Cocoa 寻找类似电子表格的控件

macos - 如何在基于 View 的 NSTableView 中添加行跨度?

macos - 如何在 macosx 内核中获取特定进程的虚拟地址的物理地址?

python - 如何从 python 包创建 osx 应用程序/dmg?

objective-c - 将数据从 NSTableView 获取到 NSViewController