2013-04-15 3 views
3

J'ai un gros problème et je n'arrive pas à le résoudre.Comment définir la couleur d'arrière-plan tout en sélectionnant la ligne de NSOutlineView

J'ai un NSOutlineView qui contient une NSButtonCell qui est lié à arrayController de là, il met son Title et basé sur une valeur d'une image est définie dans le fond de la cellule par des codes.

L'image est définie en utilisant ces codes

[cell setImage:[NSImage imageNamed:@"sbWarn.png"]]; 
[cell setImagePosition:NSImageOverlaps]; 
[cell setBackgroundColor:[NSColor clearColor]]; 

Le problème est lorsque je sélectionne une ligne la ligne sélectionnée affiche un fond noir. J'ai essayé tous les moyens possibles, comme la définition de l'arrière-plan en tant que clearColor, etc.

Comment puis-je lui donner un aspect esthétique.

+1

Vous pouvez probablement résoudre ceci seulement en créant votre propre descendant de cellule et y faire le dessin. Cela ouvre également plus de possibilités de dessiner le contenu (par exemple, plus d'une image, des badges, différentes couleurs de texte, etc.). –

+0

Je considère que la vue en plan en question est basée sur des cellules. Les vues de table basées sur les vues (et donc les vues de contours) fournissent les moyens de dessiner les arrière-plans (bien que vous ayez à fouiller dans les docs), mais vous perdriez la possibilité d'utiliser les liaisons de la même manière, pas sûr que ça vaut le coup. – Monolo

+0

Il peut y avoir quelque chose ici, cependant: http://stackoverflow.com/questions/2062605/how-to-set-background-color-of-cell-with-nsbuttoncell-type-in-nstableview – Monolo

Répondre

1

Cette approche devrait fonctionner. Il est de la mémoire, donc aucune garantie, mais un mockup rapide semblait donner les résultats que vous recherchez:

// Outline view delegate 

-(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item { 

    NSUInteger rowNo = [outlineView rowForItem:item]; 

    NSColor *backgroundColor; 
    if ([[outlineView selectedRowIndexes] containsIndex:rowNo]) { 
     backgroundColor = // Highlighted color; 
    } 
    else { 
     backgroundColor = // Normal background color; 
    } 

    [cell setBackgroundColor: backgroundColor]; 
} 

Dans votre cas, vous serez d'appliquer bien sûr que la couleur de fond de la cellule sur les colonnes avec des piles boutons.

Ceci est la cellule de bouton utilisée, créée en outlineView:dataCellForTableColumn:item:.

NSButtonCell *cell = [[NSButtonCell alloc] init]; 

[cell setBezelStyle:NSRegularSquareBezelStyle]; 
[cell setButtonType:NSToggleButton]; 
[cell setBordered:NO]; 
[cell setTitle:@""]; 
[cell setImage:[NSImage imageNamed:@"green.png"]]; 
[cell setAlternateImage:[NSImage imageNamed:@"red.png"]]; 
[cell setImagePosition:NSImageOverlaps]; 
+0

buttonCell est déjà créé dans l'interface utilisateur. –

+0

@AnoopVaidya Je viens de tester cela dans mon petit banc d'essai, et ça marche aussi. Faites-vous quelque chose dans votre outlineView: willDisplayCell: forTableColumn: item: '? – Monolo

+0

si je le fais dans nswindow directement cela fonctionne, mais il a dessiné sur nsview –

0

Je pense que vous devez utiliser le type de bouton comme "Changement momentané". Vous pouvez le changer à partir des propriétés du bouton.

Questions connexes