NSTableView, Séparateurs & Selection
Bonjour,
ça va sûrement vous paraà®tre un peu sans importance comme problème, mais je cherche à reproduire la même table que le logiciel Wallet. (Captures plus bas).
En fait je souhaiterai simplement sépararer mes Cell mais aussi dessiner l'image de selection par dessus les les séparateurs haut et bas de la cell.
Les problèmes que je rencontre sont :
- Si je choisi simplement "Horizontal Grid Lines" dans les attributs de la Table View, il dessine les séparateurs meme entre des Cells vides.
- Si je choisi quand meme les grid lines, je dois dessiner le selecteur en dehors de la Cell... ducoup y'a des problèmes d'affichage quand je switch de cell, avec des traits qui restent affichés alors qu'ils ne devraient pas
- Si je choisi de dessiner moi meme les séparateurs, je ne peux en dessiner qu'un seul par Cell au risque d'avoir un trait de 2px de hauteur entre chaque lignes au lieu d'1px voulu.
Bref je m'arrache les cheveux sur un détail esthétique qui me tient à coeur...
Merci d'avance,
Louka
ça va sûrement vous paraà®tre un peu sans importance comme problème, mais je cherche à reproduire la même table que le logiciel Wallet. (Captures plus bas).
En fait je souhaiterai simplement sépararer mes Cell mais aussi dessiner l'image de selection par dessus les les séparateurs haut et bas de la cell.
Les problèmes que je rencontre sont :
- Si je choisi simplement "Horizontal Grid Lines" dans les attributs de la Table View, il dessine les séparateurs meme entre des Cells vides.
- Si je choisi quand meme les grid lines, je dois dessiner le selecteur en dehors de la Cell... ducoup y'a des problèmes d'affichage quand je switch de cell, avec des traits qui restent affichés alors qu'ils ne devraient pas
- Si je choisi de dessiner moi meme les séparateurs, je ne peux en dessiner qu'un seul par Cell au risque d'avoir un trait de 2px de hauteur entre chaque lignes au lieu d'1px voulu.
Bref je m'arrache les cheveux sur un détail esthétique qui me tient à coeur...
Merci d'avance,
Louka
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bref essayons de débroussailler :
- la NStableView est elle standard (c'est à dire que ce n'est pas une sous classe) ?
- les NSCell qui y sont affichées sont elles personnalisées (donc tu as créé une sous classe) ?
Sous classage de NSTableView + des NSCell
(Adepte du sous-classage).
En fait c'est tout con. Je veux pouvoir mettre des traits entre les lignes, et pouvoir en plus dessiner mon selecteur (le dégradé Aqua ou Graphite) par dessus les 2 traits de la ligne selectionnée.
Et comme je l'ai dit, le problème qui se pose si je fais ça c'est que un pixel du dégradé reste sur tout la longueur du fait qu'il doit forcément rogner sur la NSCell du dessus. Appeler un reloadData à chaque fois ça peut être lourd surtout quand je liste + de 1000 objets (meme si c'est rapide, il y a une très très légère latence qui se remarque)
Ainsi ce n'est pas la NSTableView qui serait chargée du dessin du séparateur, mais tes cellules.
Et dans cette méthode, en testant isHighlighted tu peux désactiver le dessin du séparateur quand la sélection est en cours dans la cellule.
Un truc comme çà en gros :
Le problème c'est en fait que la selection doit passer par dessus deux traits. Hors, il y aura forcément un des trait qui appartiendra à la celulle juste au dessus de celle selectionnée, et si je fais passer le dégradé par dessus, j'ai un problème de drawing.
Alors à moins d'appeler setNeedsDisplay à chaque fois qu'on change de ligne...
Bon je vous tiens au courant mais c'est vrai que comme un débile je faisais un reloadData alors que setNeedsDisplay suffit et est moins lourd vu qu'il ne doit pas recharger les données mais juste redessiner la vue et toutes les subviews.. dont les cellules.
Bon allez on va dire que grâce à toi tu m'as mis sur la bonne voie
Merci du coup de main (et vive les sous-classage)