Как выбрать подсветку списка источников, чтобы использовать внешний вид Dark Vibrancy в OS X 10.10?

В списках источников OS X 10.10, похоже, используется внешний вид световой вибрации. В Finder (и в некоторых других сторонних приложениях, например Things.app) выбранный элемент в исходном списке отображается темным цветом. Например, см. Строку "Рабочий стол" на изображении ниже.

Как я могу воспроизвести это поведение? Должен ли я использовать методы делегата для указания представления строки таблицы,

-outlineView:rowViewForItem:

и попытаться самостоятельно нарисовать чертеж, или есть более прямой подход? Если вы сделаете стандартный интерфейс исходного списка в Xcode, подсветка по умолчанию останется стандартным синим прямоугольником, который мы видели в предыдущей версии OS X.

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

Ответ 1

Поиграв некоторое время, я нашел способ сделать это. Оказалось, что я получаю стиль "Finder highlight" при использовании NSTableViewSelectionHighlightStyleSourceList и выхожу за пределы моего NSOutlineView. Поэтому я решил, что так будет, если вы откажетесь сделать это первым ответчиком.

Просто сделайте свой NSOutlineView подклассом и переопределите этот метод:

-(BOOL)acceptsFirstResponder{
    return NO;
}

Это работает, но с некоторыми минусами. Например, использование клавиш со стрелками в NSOutlineView больше не будет работать. Я загрузил приложение Things, и он также не позволяет использовать клавиши со стрелками, поэтому очень вероятно, что так они это делают. Если кто-то найдет лучший способ, отправьте его.

Ответ 2

Если вы хотите, чтобы клавиши со стрелками работали, вы можете подклассифицировать NSTableRowView и переопределить следующий метод:

- (BOOL)isEmphasized
{
    return NO;
}

Ответ 3

Вот эквивалент 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;
        }
    }

}

Ответ 4

Я не уверен, это "Темная вибрация".

Я предпочел бы попробовать установить цвет фона на что-то вроде "Alternate Selected Control Text Color"

Посмотрите на NSTextField в InterfaceBuilder. есть много цветов "Control Text", которые имеют особый вид на визуальных эффектах.

и для установки цвета выделения см. этот ответ (непроверенный): NSTableview Изменить цвет подсветки