Tri dans un tableau

olofolof Membre
07:38 modifié dans API AppKit #1
Bonjour tous,

j'ai parcouru plusieurs messages parlant de tri, mais rien qui me "convient"...

J'ai une simple NSTableView, avec deux colonnes. Mon but, faire du tri de la manière la plus simple. Dans IB, je vois que sur les objets NSTableColumn, on a les propriétés :

Sort Key
Sort Selector
Sort order

Super, me dis-je. J'ai donc renseigné le 'Sort Selector' pour mes deux colonnes :

Col1 : compareObjetCol1:
et Col2 : compareObjetCol2:

J'ai implémenté ces deux méthodes dans ma classe modèle qui représente une ligne du tableau.
C'est bien beau tout ça, mais il manque pas un lien entre mon controller (qui est la dataSource de la NSTableView) et mon objet qui représente une ligne ?

En tout cas, quand je clic sur un en-tête de colonne, y'a bien la petite flèche qui indique le sens du tri qui s'affiche. Mais par contre, le tri ne se fait pas.

J'ai du rater un truc tout bête, non ?

Merci !

Voilà  le code de ma méthode de tri (mon objet qui représente une ligne du tableau est FGObjet) :

<br />-(NSComparisonResult) compareObjetCol1:(FGObjet *)aObjet {<br />	return -[[aObjet colonne1] compare:[self colonne1]];<br />}<br />

Réponses

  • fouffouf Membre
    07:38 modifié #2
    Le 'sort selector' dans IB ne marche (si je ne m'abuse) que lorsque tu utilises les bindings et un NSArrayController. Or apparemment, tu utilises les dataSource (d'après ce que j'ai lu dans ton message), donc ce que tu devrais plutôt faire, c'est implémenter le clique dans les headerCell (la où il y a les titres), puis de classer le contenu du tableau avec sortUsingSelector: .

    Par contre, je te demande pardon, mais je ne me souviens plus comment il faut faire pour savoir quelle colonne est sélectionnée et surtout comment afficher les flèches dans ces colonnes. Mais je pense que d'autres sur le forum sauront le faire ;)
  • AliGatorAliGator Membre, Modérateur
    mars 2006 modifié #3
    Oui tout à  fait fouf, il me semble aussi que les "sort selector" ne marchent que pour les bindings.

    Pour apporter ma pierre à  l'édifice, je te conseille d'aller lire cet article de CocoaDev ainsi que celui-là  aussi, pour trier ta tableView.
  • olofolof Membre
    07:38 modifié #4
    Damned !

    Ok, alors dans ce cas, j'ai déjà  implémenté la détéction du clic et le tri, mais il me manquait l'affichage de la flèche dans l'en-tête de la colonne. Alors je vais continuer sur cette voie... Zut, moi qui espérait trouver quelque chose de tout automatique  ;)

    Merci !

  • mars 2006 modifié #5
    Oui oui, ça existe. Les NSSortDecriptor. Tu compares deux objets en utilisant le même accesseur et utilises compare: pour faire un tri des objets renvoyés, soit la situation idéale pour un NSSortDescriptor. Les sort descriptor dans IB ce sont les 3 champs que tu donnes.

    Comme sort key, tu utilises colonne1.
    Comme tu utilises compare:, pas besoin de mettre le selector (en fait il le mets dans le placeholder, donc c'est bon).
    Et pour l'ordre, je présume que tu mets descending.

    Et tout sera auto.

    Mais ça implique que tu utilises les bindings, comme dit plus haut.
  • olofolof Membre
    07:38 modifié #6
    dans 1142799863:

    Mais ça implique que tu utilises les bindings, comme dit plus haut.


    Ok, je reprends ma phrase, alors :

    Zut, moi qui espérait trouver quelque chose de tout automatique, sans utiliser les bindings (ben ouais, j'ai déjà  assez de peine sans  :-\\)
Connectez-vous ou Inscrivez-vous pour répondre.