【问题标题】:Keep NSTableCellView in focus保持 NSTableCellView 为焦点
【发布时间】:2015-12-07 17:55:15
【问题描述】:

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

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

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

【问题讨论】:

  • 文本视图与表格视图在不同的窗口中吗?灰色用于非键窗口中的选择。
  • 没有文本视图与 NSTableView @KenThomases 在同一窗口中
  • 我的错误。每当表格视图不是第一响应者并且不包含第一响应者时,就会出现灰色。
  • @KenThomases 好的,我可以覆盖它吗?

标签: objective-c xcode macos cocoa nstableview


【解决方案1】:

您可以使用NSTableRowView 的自定义子类,它始终保持其emphasized 属性为真。您将覆盖 getter 方法 -isEmphasized 以返回 true。当您使用它时,不妨重写 setter 方法 -setEmphasized: 以不调用 super。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2020-03-18
    • 2011-04-22
    • 2017-07-19
    相关资源
    最近更新 更多