12

在 OS X 10.10 源列表中似乎使用了轻快的外观。在 Finder(以及在其他一些第三方应用程序中,例如 Things.app)中,源列表中的选定项目由深色活力外观指示。例如,请参见下图中的桌面行。

我怎样才能复制这种行为?我是否需要使用委托方法来指定表格行视图,

-outlineView:rowViewForItem:

并尝试自己进行自定义绘图,还是有更直接的方法?如果您在 Xcode 中创建标准源列表 UI,则默认突出显示仍然是我们在以前版本的 OS X 中看到的标准蓝色矩形。

源列表采用浅活力风格,所选项目较暗(使用深色活力风格)

4

4 回答 4

12

玩了一段时间后,我找到了一种方法来实现这一点。事实证明,当使用 NSTableViewSelectionHighlightStyleSourceList 并在我的 NSOutlineView 外部单击时,我会得到“Finder 突出显示”样式。所以我想如果你拒绝让它成为第一响应者,它会保持这种状态。

只需将您的 NSOutlineView 设置为子类并覆盖此方法:

-(BOOL)acceptsFirstResponder{
    return NO;
}

它有效,但有一些缺点。例如,在 NSOutlineView 中使用箭头键将不再起作用。我下载了 Things 应用程序,它也不允许使用箭头键,所以很可能他们就是这样做的。如果有人找到更好的方法,请发布。

于 2014-11-18T09:26:38.573 回答
12

这是 Swift 等价物:

func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
    return CustomTableRowView(frame: NSZeroRect);
}

以及 NSTableRowView 的子类

import Cocoa

class CustomTableRowView: NSTableRowView {

    override var isEmphasized: Bool {
        set {}
        get {
            return false;
        }
    }

}
于 2016-11-08T00:18:12.337 回答
7

如果您想保持箭头键正常工作,您可以继承 NSTableRowView 并覆盖以下方法:

- (BOOL)isEmphasized
{
    return NO;
}
于 2015-01-12T14:38:12.040 回答
1

我不确定,这是“黑暗活力”。

我宁愿尝试将背景颜色设置为“备用选定控件文本颜色”

看看 InterfaceBuilder 中的 NSTextField。有许多“控制文本”颜色,它们在视觉效果视图中具有特殊的外观。

并设置选择颜色看到这个答案(未经测试): NSTableview 更改突出显示颜色

于 2014-10-28T10:27:31.787 回答