如何获取源列表选择突出显示在OS X 10.10中使用Dark Vibrancy外观?

时间:2014-10-27 20:51:53

标签: macos cocoa nsoutlineview osx-yosemite nsvisualeffectview

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

我该如何复制这种行为?我是否需要使用委托方法来指定表行视图

-outlineView:rowViewForItem:

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

Source list with light vibrancy style, the selected items is darker (using a dark vibrancy style)

4 个答案:

答案 0 :(得分:12)

玩了一会儿后,我找到了实现这个目标的方法。 事实证明,我会得到" Finder的亮点"使用NSTableViewSelectionHighlightStyleSourceList并在我的NSOutlineView外部单击时的样式。因此,如果你拒绝让它成为第一响应者,我认为它会保持这种状态。

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

-(BOOL)acceptsFirstResponder{
    return NO;
}

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

答案 1 :(得分:8)

这是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;
        }
    }

}

答案 2 :(得分:7)

如果您希望保持箭头键的工作,可以继承NSTableRowView并覆盖以下方法:

- (BOOL)isEmphasized
{
    return NO;
}

答案 3 :(得分:1)

我不确定,这是“Dark Vibrancy”。

我宁愿尝试将背景颜色设置为“Alternate Selected Control Text Color”

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

并设置选择颜色,请参阅此答案(未经测试): NSTableview Change the highlight colour