2013-03-26 1 views
1

J'ai une sous-classe personnalisée de NSOutlineView qui utilise une cellule TextFieldCell comme cellule. Certains éléments qui ont un enfant (qui représente un groupe d'enfant).NSOutlineView: Comment avoir une couleur personnalisée différente pour l'élément avec et sans enfant?

Je veux avoir une couleur personnalisée pour les articles avec enfant et une autre couleur personnalisée pour les articles sans enfant. J'ai essayé de le changer dans IB mais la couleur change seulement pour les éléments enfants et dans le code je peux aussi définir une couleur personnalisée mais seulement pour les éléments enfants. Est-ce que quelqu'un peut m'aider?

+0

Je pense que vous pouvez y parvenir en remplaçant le - (void) drawRow: (NSInteger) rowIndex clipRect: (NSRect) clipRect dans la sous-classe NSOutlineView. – nkongara

+0

Oui, après une recherche approfondie, je pense que c'est la seule solution. Le problème est que j'ai besoin d'implémenter manuellement tout le dessin de la cellule. Quelqu'un sait-il un bon point de départ pour cela? – Luca

Répondre

0

Après une recherche approfondie semble que la seule façon de le faire est de passer outre la méthode drawRow: sur la NSOutlineView sous-classe

0

vous pouvez également implémenter la méthode NSOutlineViewDelegate - (void) outlineView: (NSOutlineView *) aTableView willDisplayCell: (id) aCell forTableColumn: (NSTableColumn *) Élément aTableColumn: (id) élément;

dans ce que vous pourriez avoir une partie qui va quelque chose le long des lignes de:

if ([self outlineView:self isGroupItem: item]){ 
NSColor *color; 
if ([item.children count] == 0) { 
color = [NSColor redColor]; 
} 
else { 
color = [NSColor blueColor]; 
} 
[aCell setDrawsBackground:YES]; 
[aCell setBackgroundColor: color]; 
} 

Désolé mise en forme, je suis encore assez novice en la matière. Cela devrait fonctionner, puisque j'ai utilisé ce code pour quelque chose de similaire. J'espère que c'est ce que vous cherchez.

+0

Je vais essayer votre méthode pour voir si cela fonctionne. Merci! – Luca

+0

Modifiez item.isGroup en [self outlineView: self isGroupItem: item]. Je ne me souviens pas de la méthode exacte, donc j'ai mis item.isGroup juste pour indiquer qu'une partie du code devrait être exécutée uniquement pour les lignes de groupe. Je vais éditer ma réponse pour éviter toute confusion à partir de maintenant. – baxus

Questions connexes