NSOutlineView + DataSource правильно настроен.Как добавить ImageAndTextCell? - PullRequest
0 голосов
/ 31 марта 2012

Я правильно настроил NSOutlineView с его источником данных, и он отлично работает.

На самом деле это простой File Explorer, показывающий структуру папок определенного пути (папки, подпапки и т. Д.). Подпапки загружаются по требованию (когда элемент папки разворачивается только тогда, по соображениям скорости загружается его содержимое).

Мне нужно знать КАК я мог бы легко добавить поддержку того, что у меня уже есть для класса ImageAndTextCell , чтобы я мог поставить, например, значок папки / файла рядом с каждой записью ...

Любая помощь приветствуется. (Пожалуйста, не указывайте мне на документацию; я изучил почти все это; мне нужен совет от некоторых, кто это сделал, чтобы я просто ДОБАВЛЯЛ свой существующий код; без необходимости переписывать с нуля или полностью изменять логика ...)

Спасибо

Вот * Мой код * (у меня возникли проблемы с форматированием для SO ... поэтому я разместил его на Snippet.MX )


Сделал то, что предложил, и все имена элементов схемы обзора внезапно НЕ появляются ...

enter image description here

1 Ответ

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

Документация - твой друг, но я понимаю, что иногда она настолько велика.

КСТАТИ Вам необходимо установить ImageAndTextCell для своего контурного вида, вы можете сделать это в своем методе инициализации контроллера окна или в методе awakeFromNib, или непосредственно (при необходимости) в своем подклассе NSOutlineView.

В моем проекте есть подкласс NSOutlineView, как показано ниже

// myOutlineView subclass

- (void)awakeFromNib {
    self.imageCell = [[ImageAndTextCell alloc] init];
    [self.imageCell setEditable: NO];
    NSTableColumn* leftColumn = [[self tableColumns] objectAtIndex:0];
    [leftColumn setDataCell: self.imageCell];
}

Затем вам нужно реализовать метод делегата willDisplayCell, в котором вы устанавливаете изображение для своего конкретного столбца, как показано ниже (значок папки, значок файла txt, значок jpg).

В коде, показанном ниже, я получаю его из моего одноэлементного VDIconUtils, но вы можете просто вернуть NSImage

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    [cell setDrawsBackground:NO];
    if ([[tableColumn identifier] isEqualToString:@"mycellname"]) {
        [cell setImage:[[VDIconUtils sharedIconUtils] iconForFolderStatus:fs :16 :[outlineView isItemExpanded:item]]];
    }

}
...