Потеря выделения выделения в подклассе NSOutlineView - PullRequest
0 голосов
/ 06 марта 2012

Чтобы настроить стиль выделения синего градиента по умолчанию, я создал подкласс из 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
        }
    }
}

Это отлично работает, но иногда фон не рисуется. На скриншоте ниже вы можете видеть, как выделение выделения не отображается при нажатии на первый элемент после того, как был выбран последний.

Loosing selection highlight on step 4

Похоже, что это происходит только в том случае, если новый выбранный элемент не находится непосредственно под или выше старого выбранного . Выбор пяти элементов в порядке 1-2-3-4-5-4-3-2-1 всегда рисует соответствующий фон, а все остальное (например, 1-2-5) - нет.

Почему это происходит? Если вам понадобятся какие-либо подробности, я буду рад добавить еще немного кода, но пока не знаю, где искать это поведение.

1 Ответ

1 голос
/ 14 марта 2012

вот мое (очень простое) решение с использованием блоков:

- (void)highlightSelectionInClipRect:(NSRect)clipRect
{
    [[self selectedRowIndexes] enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) 
     {
         // draw gradient
    }];
}
...