如何使OS X 10.10中的源列表选择高亮使用深色活力外观?

12
在OS X 10.10中,源列表似乎使用了轻亮外观。在Finder中(以及其他某些第三方应用程序,例如Things.app),源列表中的选定项目由深色活力外观指示。例如,请参见下面图像中的桌面行。
我该如何复制这个行为?我需要使用委托方法来指定表格行视图吗?
-outlineView:rowViewForItem:

我应该尝试自定义绘图还是有更直接的方法?如果您在Xcode中制作标准的源列表UI,则默认高亮显示仍然是我们在之前版本的OS X中看到的标准蓝色矩形。

具有轻微透明效果样式的源列表,所选项目较暗(使用深色透明效果样式)

4个回答

12

我围绕这个问题玩耍了一会儿后找到了一种解决方法。原来,在使用 NSTableViewSelectionHighlightStyleSourceList并在我的 NSOutlineView 外单击时,我会得到“Finder highlight” 样式。因此,我想如果您拒绝使其成为第一个响应者,它应该会保持这种样式。

只需将你的 NSOutlineView 设置为子类,并覆盖这个方法:

-(BOOL)acceptsFirstResponder{
    return NO;
}

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


2
它有效是因为在一个非第一响应者的outlineView中,振动效果是所选项的默认效果。如果箭头导航最好在其他视图(如Finder.app中浏览文件)中执行,则这是首选方法。但是,如果用户期望通过您的大纲视图进行导航(例如Xcode的左侧栏),则不应使用此技巧。 - Renfei Song
我成功地将 OutlineView 的 refusesFirstResponder 属性设置为 false 以实现此目的。 - arolson101

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

}

7
如果您想让箭头键继续工作,您可以子类化NSTableRowView并覆盖以下方法:
- (BOOL)isEmphasized
{
    return NO;
}

1
对我来说很有效。请注意:这里真的需要一个子类,只分配NSTableRowView并将isEmphasized属性设置为“NO”是行不通的。 - hnh

1

我不确定这是“深色亮度”。

我宁愿尝试将背景颜色设置为类似于“备选选择控件文本颜色”的颜色

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

要设置选择颜色,请参阅此答案(未经测试): NSTableview更改突出显示的颜色


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