Tri dans une NSTableView
Veillard
Membre
Bonjour,
J'ai un problème dans le tri de ma TableView. Quand je clique sur l'en-etête de la colonne le tri s'effectue bien dans l'ordre croissant mais quand je clique à nouveau, j'aimerais bien que le tri dans l'ordre décroissant s'effectue. J'ai essayé ceci :
:why?:
J'ai oublié quelque chose mais quoi ? ???
Merci à tous
J'ai un problème dans le tri de ma TableView. Quand je clique sur l'en-etête de la colonne le tri s'effectue bien dans l'ordre croissant mais quand je clique à nouveau, j'aimerais bien que le tri dans l'ordre décroissant s'effectue. J'ai essayé ceci :
:why?:
-(void) tableView:(NSTableView*)tableView didClickTableColumn:(NSTableColumn *)tableColumn<br />{<br /> NSSortDescriptor *aDescriptor;<br /><br /> aDescriptor=[[NSSortDescriptor alloc] initWithKey:[[tableColumn sortDescriptorPrototype] key] ascending:YES selector:@selector(compare:)];<br /><br /> [[tableView tableColumnWithIdentifier:[tableColumn identifier]] setSortDescriptorPrototype:aDescriptor];<br /><br /> NSArray *sortDescriptorArray = [NSArray arrayWithObject:aDescriptor];<br /> [aDescriptor release];<br /><br /> [tableView setSortDescriptors:sortDescriptorArray];<br /><br /> [tableauDesPlongees sortUsingDescriptors:[tableView sortDescriptors]];<br /> <br /> [tableView reloadData];<br />}<br />
J'ai oublié quelque chose mais quoi ? ???
Merci à tous
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
essayes d'utiliser une variable membre (bool) dans ton delegate pour te souvenir de l'ordre de tri:
[edit]
en fait c'est pas complet, il ne faut inverser l'ordre de tri que si on clique la colonne déjà triéé... il faut donc se souvenir de la précédenet colonne sélectionnée, et si c'est la même, alors inverser le booléen:
_idColonne étant un NSString membre de ton delegate...
il y a sûrement plus simple, mais ça devrait marcher (attention: non testé ! j'ai pondu ça en quelques minutes à l'instant !)
[/edit]
voilà voilà ...
Je vais voir si je n'ai pas fait une erreur quelque part...
j'ai juste dû changer un peu l'ordre:
[edit]
tu as bien mis _triCroissant et _idColonne en membres de ta classe et pas en variables locales ?
[/edit]
Comment on fait pour les mettre en membre de la classe ? j'ai quelques lacunes :-\
il faudrait pour gérer ça utiliser un dictionnaire de booléens, avec l'id de la colonne comme clé:
ajoute dans ton .h les membres de ta classe:
modifies didClickTableColumn comme suit:
et ajoute dans awakeFromNib:
[edit]
pour mettre en membres de ta classe, c'est comme tableauDesPlongees
voici un exemple:
[/edit]
Et en plus ça marche ! :brule: :brule: :brule:
Je vais en profiter pour améliorer mon appli.
Ca fait 2 mois que je galère
Encore merci
:trinque:
J'ai remarqué que dans Interface Builder, quand on sélectionne une colonne d'un tableView, on peut ajouter une sortKey et un sortSelector pour une colonne, j'ai essayé d'utiliser ceic tel quel mais ça ne marche pas, j'ai bien la flèche qui est soit en bas soit ne haut, qui change de sens mais rien ne change dans ma tableView.
J'aimerai utiliser cette solution car la mienne actuellement est assez rededontante niveau code, et je me trimballe X booléens, étant donné que j'ai x colonnes. De plus les flèches "d'ordre" n'apparaissent pas.
Est ce que le sortDescriptor demandé dans IB doit être un selector de tri sur le tableau qui sert de dataSource à ma tableView ?
Edit: Saleté d'onglet, il m'en restait un que j'avais pas vu qui répondait à ma question de sortKey et cie via IB, et vu que j'utilsie pas les bindings ! Problème "résolu" !