2012-01-01 2 views
5

J'ai un NSOutlineView basé sur View lié à un NSTreeController. Tout semble fonctionner correctement jusqu'à ce que j'implémente la méthode outlineView:isGroupItem: dans mon délégué, puis l'en-tête de groupe a soudainement cessé d'apparaître. Comme cetteNSTableView/NSOutlineView et isGroupItem basés sur les vues

enter image description here

Je confirme que si je devais changer la NSOutlineView à base de cellules alors l'élément du groupe affiche correctement. Un comportement similaire est également observé pour NSTableView. Est-ce que quelqu'un d'autre a rencontré ce problème?

Répondre

11

Résolu!

avéré que j'eu à mettre en oeuvre le procédé suivant dans la NSOutlineView délégué

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

Apparemment, en vue par défaut basée NSOutlineView générer vue pour chaque cellule de la table en plaçant le point de vue avec le même identifiant que la colonne . Cependant, dans le cas d'une ligne de groupe/groupe, il n'y a pas de tableColumm associé à cette ligne, donc la vue est nulle et n'apparaît pas.

Jouer avec Apple TableViewPlayground sample project vraiment aidé! Hautement recommandé!

+0

Merci pour la mise à jour détaillée. –

+0

+1 Pour la référence TableViewPlayground – rluba

+0

Pourquoi "outlineView: viewForTableColumn: item:" n'est pas dans les documents [official 'NSOutlineViewDelegate'] (https://developer.apple.com/library/mac/documentation/cocoa/reference/ NSOutlineViewDelegate_Protocol/Reference/Reference.html) – zakdances

Questions connexes