保持NSTableCellView处于焦点状态

3
我有一个包含NSTableCellViewsNSTableView。当用户选择行时,它使用默认的选择颜色,如下所示: enter image description here 但是,当用户在NSTextView中开始编辑时,NSTableCellView失去了焦点,并变为默认的灰色,如下所示: enter image description here 我的NSTableView是否可以在用户编辑NSTextView时保持蓝色的选择颜色?谢谢。

文本视图是否在与表格视图不同的窗口中?灰色用于非关键窗口中的选择。 - Ken Thomases
不,文本视图与 NSTableView 在同一个窗口中。@KenThomases - user1445205
抱歉,当表视图不是第一响应者并且不包含第一响应者时,灰色的颜色就会出现。 - Ken Thomases
@KenThomases 好的,那我能覆盖它吗? - user1445205
1个回答

3
你可以使用NSTableRowView的自定义子类,该子类始终将其emphasized属性设置为true。你需要重写getter方法-isEmphasized以返回true。当你在做这个时,也可以一并重写setter方法-setEmphasized:以不调用super。
如果你是在IB中设计,请添加一个自定义视图到其中一个表列中。在Identity inspector中将其类设置为你自定义NSTableRowView子类的类。此外,将其标识符设置为"NSTableViewRowViewKey"。这是一个特殊的标识符,使得表格视图将其用作其行视图。
如果你想在代码中实现这个功能,你可以实现表格视图代理方法-tableView:rowViewForRow:以返回你的自定义行视图类的实例。按照该方法的文档,并在首先尝试从表的重用队列中获取行视图之前,在表格上调用-makeViewWithIdentifier:owner:方法。传递任何你喜欢的标识符。如果表格视图返回nil,则创建一个该类的实例并将其identifier属性设置为与你正在使用的相同值来查找它。
但要注意,像这样更改突出显示颜色的含义可能会困惑你的用户。例如,他们可能会瞥一眼你的UI,看到表格看起来像有焦点,然后尝试使用箭头键移动所选行。他们会惊讶地发现他们已经在文本视图中移动了插入点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接