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

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

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

-outlineView:rowViewForItem:

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

Список источников со стилем светлой яркости, выбранные элементы темнее (в стиле темной яркости

4 ответа

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

}

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

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

-(BOOL)acceptsFirstResponder{
    return NO;
}

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

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

- (BOOL)isEmphasized
{
    return NO;
}

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

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

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

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

Другие вопросы по тегам