Чтобы настроить стиль выделения синего градиента по умолчанию, я создал подкласс из NSOutlineView
и переопределил метод -highlightSelectionInClipRect
, например:
- (void)highlightSelectionInClipRect:(NSRect)theClipRect
{
NSRange aVisibleRowIndexes = [self rowsInRect:theClipRect];
NSIndexSet *aSelectedRowIndexes = [self selectedRowIndexes];
NSInteger aRow = aVisibleRowIndexes.location;
NSInteger anEndRow = aRow + aVisibleRowIndexes.length;
for (int aRow; aRow < anEndRow; aRow++) {
if([aSelectedRowIndexes containsIndex:aRow]) {
// draw gradient
}
}
}
Это отлично работает, но иногда фон не рисуется. На скриншоте ниже вы можете видеть, как выделение выделения не отображается при нажатии на первый элемент после того, как был выбран последний.
Похоже, что это происходит только в том случае, если новый выбранный элемент не находится непосредственно под или выше старого выбранного . Выбор пяти элементов в порядке 1-2-3-4-5-4-3-2-1 всегда рисует соответствующий фон, а все остальное (например, 1-2-5) - нет.
Почему это происходит? Если вам понадобятся какие-либо подробности, я буду рад добавить еще немного кода, но пока не знаю, где искать это поведение.