保持 NSTableCellView 的焦点

Keep NSTableCellView in focus

我有一个 NSTableView 包含 NSTableCellViews。当用户选择行时,它使用默认选择颜色,如下所示:

但是当用户在 NSTextView 中开始编辑时,NSTableCellView 失去焦点并变成默认的灰色,如下所示:

当用户在 NSTextView 中编辑时,我的 NSTableView 可以保持蓝色选择颜色吗?提前致谢。

您可以使用 NSTableRowView 的自定义子 class,它始终保持其 emphasized 属性 为真。您可以将 getter 方法 -isEmphasized 覆盖为 return true。当你这样做的时候,不妨覆盖 setter 方法 -setEmphasized: 不调用 super.

如果您在 IB 中进行设计,则可以将自定义视图添加到 table 列之一。在身份检查器中,将其 class 设置为 NSTableRowView 的自定义子视图。此外,将其标识符设置为 "NSTableViewRowViewKey"。这是一个特殊的标识符,导致 table 视图将其用作行视图。

如果您想在代码中执行此操作,您可以将 table 视图委托方法 -tableView:rowViewForRow: 实现到 return 自定义行视图 class 的实例。按照该方法的文档并在 table 视图上调用 -makeViewWithIdentifier:owner:,首先,尝试从 table 的重用队列中获取行视图。传递您喜欢的任何标识符。如果 table 视图 returns nil,创建您的 class 的实例并将其 identifier 属性 设置为与您相同的值用来查找它。

不过请注意,像这样更改突出显示颜色的含义可能会使您的用户感到困惑。例如,他们可能会瞥一眼您的 UI,发现 table 看起来有焦点,然后尝试使用箭头键移动所选行。他们会惊讶地发现他们已经在文本视图中移动了插入点。