Comment mettre un bouton ou image dans un NSTableView
meall
Membre
Hi,
J,essai de faire un peu comme dans certaines applications où l'on voit des check box et des image (et éventuellement du texte aussi) dans un tableau qui ressemble à un NSTableView. Par exemple, dans Leopard et Tiger, le panneau Sync de .Mac a un truc similaire à ce que j'aimerais faire.
Est-ce que quelqu'un pourrait me pointer un tutorial pour voir comment on fait ça? IB me donen pas tellement le choix, alors je me demande si je dois le forcer par programmation ou entièrement utiliser une approche différente.
Merci
J,essai de faire un peu comme dans certaines applications où l'on voit des check box et des image (et éventuellement du texte aussi) dans un tableau qui ressemble à un NSTableView. Par exemple, dans Leopard et Tiger, le panneau Sync de .Mac a un truc similaire à ce que j'aimerais faire.
Est-ce que quelqu'un pourrait me pointer un tutorial pour voir comment on fait ça? IB me donen pas tellement le choix, alors je me demande si je dois le forcer par programmation ou entièrement utiliser une approche différente.
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il suffit de glisser une NSButtonCell sur la colonne.
Par contre, après il faut implémenter les fonctions supplémentaires du delegate pour le gérer.
Les méthodes du data-source suffisent pour gérer le bouton (tableView:objectValueForTableColumn:row: pour l'état du bouton, et tableView:setObjectValue:forTableColumn:row: pour récupérer/mémoriser quand l'utilisateur a cliqué dessus).
.
Je déterre ce sujet... parce que je cherche à faire la même chose (une checkbox dans ma TableView), et j'ai du mal à voir comment faire.
Enfin plus exactement :
1) d'une part c'est une NSOutlineView et pas une NSTableView (mais je ne pense pas que ça change bcp le problème),
2) et d'autre part j'arrive à remplir la Outline/TableView en faisant cocher la case selon mes besoins... en retournant un [NSNumber numberWithBool:...] dans la méthode de dataSource pour la colonne en question... mais ça ça va quand c'est une colonne dédiée à la checkbox.
Or moi dans ma colonne avec la Checkbox, il y a à la fois l'état de la checkbox (cochée ou pas) ET le texte à droite de la checkbox que je veux différent pour chaque ligne...
Alors pour l'instant en dépannage j'ai dédié une colonne de ma OutlineView avec juste la checkbox, dont j'arrive à régler l'état selon la valeur voulue via mon dataSource... et une colonne à côté pour le texte.
Mais comme en plus c'est une OutlineView et que cette colonne où je veux checkbox+texte c'est la première colonne, celle qui contient les triangles et voit son contenu indenté selon le niveau hiérarchique... ça fait moyen.
Une solution, pour que mon dataSource renseigne à la fois l'était coché/décoché de la Checkbox (ButtonCell) et son texte ?
Merci à vous
Il faut modifier les cells à la volée dans la méthode:
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
Dans ton cas il suffit de faire:
if([[tableColumn identifier] isEqualToString:@checkbox])
[cell setTitle:@xxx];
En fait c'est la seule solution que j'avais trouvée en lisant la doc, utiliser cette méthode de delegate pour altérer ma "CheckBox Cell" à la volée pour modifier son titre... Mais je trouvais ça pas propre (pas MVC) d'utiliser une méthode de delegate pour altérer le contenu, ça devrait être à une méthode du dataSource de faire ça...
Mais bon, apparemment passer par cette méthode de delegate pour "régler" le contenu de ma checkbox cell, c'est la seule solution... ::)
Merci
Disons que ça fait un peu désordre
Mais c'est tout à fait MVC, title étant un attribut de NSCell.
Maintenant, c'est pas très compliqué de tout faire dans le dataSource, il faut sous classer NSButtonCell et faire:
Et donc dans le dataSource:
J'en suis resté à la méthode de delegate... d'ailleurs maintenant je fais tout dedans pour ce qui est de ma NSButtonCell (pour les autres colonnes je remplis dans la méthode de dataSource, mais pour la CheckBox Cell, j'ai préféré centraliser à la fois le NSButtonState et le title au même endroit, dans la méthode de delegate, plus simple à relire. Et puis ça me permet de fixer le "allowsMixedState" de ma CheckBox cell selon chaque cas (vu que dans mon cas ça dépend de la ligne, aussi)...