2012-01-01 7 views
5

Ho un NSOutlineView basato su vista associato a un NSTreeController. Tutto sembra funzionare correttamente fino a quando non implemento il metodo outlineView:isGroupItem: nel mio delegato, quindi l'intestazione del gruppo ha improvvisamente smesso di mostrare. Ti piace questaVisualizzazione NSTableView/NSOutlineView e isGroupItem

enter image description here

mi ha confermato che se dovessi cambiare la NSOutlineView al cell-based quindi la voce gruppo si presenta in modo corretto. Un comportamento simile è stato osservato anche per NSTableView. Qualcun altro ha riscontrato questo problema?

risposta

11

Risolto!

Si è rivelato ho dovuto attuare il seguente metodo nella NSOutlineView delegato

- (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]; 
} 

Apparentemente, per visualizzazione predefinita riferiscono NSOutlineView generare vista per ogni cella della tabella individuando la vista con lo stesso identificatore della colonna . Tuttavia, nel caso di una voce di gruppo/gruppo, non vi è alcuno tableColumm associato a quella riga, quindi la vista risulta essere nulla e non apparire.

Giocare con Apple TableViewPlayground sample project davvero aiutato! Altamente raccomandato!

+0

Grazie per l'aggiornamento dettagliato. –

+0

+1 Per il riferimento TableViewPlayground – rluba

+0

Perché non è 'outlineView: viewForTableColumn: item:' nei documenti [ufficiali 'NSOutlineViewDelegate'] (https://developer.apple.com/library/mac/documentation/cocoa/reference/ NSOutlineViewDelegate_Protocol/Reference/Reference.html) – zakdances

Problemi correlati