2014-10-27 4 views
11

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

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

-outlineView:rowViewForItem: 

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

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

ответ

1

Я не уверен, что это «Dark Vibrancy» ,

я предпочел бы попробовать установить цвет фона на что-то вроде «Alternate выбранного элемента управления Цвет текста»

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

и для установки выбора цвета см этот ответ (непроверенные): NSTableview Change the highlight colour

11

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

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

-(BOOL)acceptsFirstResponder{ 
    return NO; 
} 

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

+2

Это работает, потому что эффект вибрации является эффектом по умолчанию для выбранных элементов в outlineView, который не является первым ответчиком. Это предпочтительный подход, если лучше использовать навигацию по стрелкам в других представлениях (например, Finder.app, в которых ожидается переход через файлы). Однако, если пользователь ожидает навигации по вашему контуру (например, левой панели Xcode), вы не должны использовать этот трюк. –

5

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

- (BOOL)isEmphasized 
{ 
    return NO; 
} 
+0

Хорошо работает для меня.Примечание: для этого действительно необходим подкласс, просто выделяя «NSTableRowView» и устанавливая свойство «isEmphasized» на «NO», не делает этого. – hnh

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

} 
+0

Работает для меня на Swift 3 Xcode 8 – styl3r

+0

работает! Я искал это весь день ... – memis