Это мой первый вопрос здесь, и я постараюсь сделать его максимально понятным.
Я хочу нарисовать пользовательский градиент в выбранной строке в NSTableView на основе вида, добавив при этом тонкий эффект повышения. Для этого мне нужно использовать более темный цвет для линий сетки, которые находятся до и после выбранной строки (см. здесь для примера). Я переопределил метод drawSeparatorInRect:
в NSTableRowView , чтобы нарисовать линию специального разделителя для выбранной строки (используя метод isSelected
в качестве флага), но я не могу сделать то же самое для выше / ниже (так как Я рисую линию внизу / вверху).
Я пробовал несколько способов сказать ближайшей строке, что она должна рисовать более темную разделительную линию, но безуспешно, поскольку шаг отображения не следует тому же порядку (я проверил это с помощью NSLogs в drawSeparatorInRect:
, и кажется, что когда вы прокручиваете немного, этот порядок меняется). Таким образом, иногда (в основном после прокрутки) строка не знает, что она должна использовать более темный цвет, поскольку она рисует сама перед выбранным (я думаю, что в данный момент выбранная строка еще не знает, что она выбрана, в противном случае я не понимаю, что происходит).
Некоторые вещи, которые я пробовал:
- В методе
drawSeparatorInRect:
выбранной строки я попытался получить доступ к представлениям братьев и сестер ([superview subviews]
) и заставить предыдущий / следующий снова нарисовать себя.
- Из подкласса
NSTableView
измените непосредственно ближайшую строку при изменении selectedIndexes .
- Рисование линии вне выбранной строки из метода
drawSeparatorInRect:
, как показано здесь .
Обратите внимание, что я сделал это, имея: представление строки, спрашивающее, выбран ли предыдущий / следующий, флаг closestRowIsSelected или внешний вызов метода, чтобы "вызвать" темный цвет.
Теперь у меня есть то, что выбранная строка рисует верхнюю и нижнюю границы, поэтому одна из них помещается вместе на предыдущую / следующую строку строки ... Это тонко, но все еще там.
Любая помощь будет хорошо принята.
Заранее спасибо.
! Я не опубликовал никакого кода, так как проблема не существует (он просто вызывает [NSBezierPath fillRect:rect]
красным цветом), я думаю ... поэтому мне нечего показать.