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

Dan*_*ell 11 macos cocoa nsoutlineview osx-yosemite nsvisualeffectview

在OS X 10.10源列表中似乎使用了光亮的外观.在Finder(以及其他一些第三方应用程序,例如Things.app)中,源列表中的所选项目由暗色振动外观指示.例如,请参见下图中的"桌面"行.

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

-outlineView:rowViewForItem:
Run Code Online (Sandbox Code Playgroud)

并尝试自己定制绘图或是否有更直接的方法?如果您在Xcode标准源列表界面默认的高亮是保持我们在以前版本的OS X已经看到了标准的蓝色矩形

光源充满活力的源列表,所选项目较暗(使用黑暗的活力风格)

Osk*_*kar 12

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

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

-(BOOL)acceptsFirstResponder{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它的工作原理是因为活动效果是不是第一响应者的outlineView中所选项目的默认效果.如果最好在其他视图中执行箭头导航,则这是首选方法(例如,Finder.app,预期通过文件导航).但是,如果用户希望浏览大纲视图(例如Xcode的左侧栏),则不应使用此技巧. (2认同)

San*_*aus 8

这是Swift的等价物:

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

和NSTableRowView的子类

import Cocoa

class CustomTableRowView: NSTableRowView {

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

}
Run Code Online (Sandbox Code Playgroud)


小智 7

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

- (BOOL)isEmphasized
{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*cic 1

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

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

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

对于设置选择颜色,请参阅此答案(未经测试): NSTableview Change thehighlight color