2012-01-01 3 views
5

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

enter image description here

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

ответ

11

Решено!

Оказалось, я должен был реализовать следующий метод в 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, связанных с этой строкой, поэтому представление оказывается нулевым и не отображается.

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

+0

Спасибо за подробное обновление. –

+0

+1 Для справки TableViewPlayground – rluba

+0

Почему не 'outlineView: viewForTableColumn: item:' в [официальных документах NSOutlineViewDelegate] (https://developer.apple.com/library/mac/documentation/cocoa/reference/ NSOutlineViewDelegate_Protocol/Reference/Reference.html) – zakdances

Смежные вопросы