Основанный на представлении NSTableView / NSOutlineView и isGroupItem - PullRequest
6 голосов
/ 02 января 2012

У меня есть NSOutlineView на основе вида, связанный с NSTreeController.Кажется, все работает правильно, пока я не реализую метод outlineView:isGroupItem: в моем делегате, тогда заголовок группы внезапно перестал отображаться.Например,

enter image description here

Я подтвердил, что если бы я изменил NSOutlineView на ячейки, то элемент группы отображается правильно.Подобное поведение также наблюдается для NSTableView.Кто-нибудь еще сталкивался с этой проблемой?

1 Ответ

12 голосов
/ 02 января 2012

Решил!

Оказалось, я должен был реализовать следующий метод в NSOutlineView делегате

- (NSView *)outlineView:(NSOutlineView *)outlineView 
     viewForTableColumn:(NSTableColumn *)tableColumn
                   item:(id)item {
    if ([self outlineView:outlineView isGroupItem:item]) {
        NSString *vId = [[[outlineView tableColumns] objectAtIndex:0] identifier];
        return [outlineView makeViewWithIdentifier:vId owner:self];
    }
    return [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self];
}

По-видимому, по умолчанию представление на основе NSOutlineView генерирует представление для каждой ячейки в таблице, находя представление с тем же идентификатором, что и столбец. В случае группового элемента / строки группы, однако, tableColumm не связано с этой строкой, поэтому представление оказывается нулевым и не отображается.

Игра с примером Apple TableViewPlayground действительно помогла! Настоятельно рекомендуется!

...