Как выбрать подсветку списка источников, чтобы использовать внешний вид 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 Изменить цвет подсветки