Multi-tableview
muqaddar
Administrateur
Salut cocoaistes,
Je voulais savoir qu'elle était la meilleure façon de gérer les tableView imbriquées (jusqu'à 5). On clique dans une lignedu premier tableview, ça nous trie le 2è tableView et ainsi de suite. Le contenu des tableaux est dans des plist avec une clé qui correspond à l'ID de l'index du tableau précédent sélectionné.
Je me demandais s'il était utile de faire une classe pour chaque contenu de tableau, sachant que ces plist seront modifiés et étoffées ailleurs dans mon appli.
merci.
Je voulais savoir qu'elle était la meilleure façon de gérer les tableView imbriquées (jusqu'à 5). On clique dans une lignedu premier tableview, ça nous trie le 2è tableView et ainsi de suite. Le contenu des tableaux est dans des plist avec une clé qui correspond à l'ID de l'index du tableau précédent sélectionné.
Je me demandais s'il était utile de faire une classe pour chaque contenu de tableau, sachant que ces plist seront modifiés et étoffées ailleurs dans mon appli.
merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
dans le delegate, modifie la cellule juste avant l'affichage, en fonction du contexte (ligne sélectionnée / non sélectionnée):
dans le premier cas, un nsbrowser pourrait peut-être convenir ?
Et pas de browser.
tu veux dire que le contenu du 2ème tableview ne change pas, uniquement son critère de tri ???
je pense que dans ce cas tu pourrais stocker le contenu des tableview comme un dictionnaires ou un array de dictionnaires, quitte à utiliser des catégories (sur les dictionnaires) pour créer des fonctions permettant d'accéder plus facilement aux objets s'y trouvant (je ne sais pas si je suis très clair, là ...)
Une petite capture ou un dessin peur-être?
En fait, comme le carnet d'adresse, on a les groupes (une tableView) et les entrées (une autre) soit 2 niveaux, moi je vais en avoir 5.
Je pense utiliser des array de dictionnaires qui contiennent l'id de la précédente ligne sélectionnée (index) à chaque fois, pour éliminer les entrées non concernées par cette ligne. Mais suis-je clair ?
ce qui m'amène à ma question suivante: comment est fait ton modèle de données ? car c'est en fonction de ça que tu utilisera un(des) tableview, outlineview, browser, etc...
un petit schéma avec les relations entre les éléments serait le bienvenu...
Ce que je voulais savoir, c'est si une classe Element suffit pour gérer tout ça et pour s'en sortir avec les tris, ou si on a besoin d'une classe par array.
[Fichier joint supprimé par l'administrateur]
de même pour pays, region, departement, groupe, catégorie:
.h:
.m:
C'est une catégorie de la classe Element mais le NSMutableDictionnary ?
J'avais l'habitude de lire les catégories comme ça : @interface PrefsController (PrefsToolbarCategory) pour les catégories.
D'autre part, certains des arrays doivent être éditables (deptArray par exemple).
Je vois sinon que tu crée quand même une classe Element en plus des catégories.
il s'agissait de créer une catégorie 'Element' pour la class nsmutabledictionary
A moins que tu veuilles dire filtrage au lieu de tri, pourquoi ne pas utiliser les entêtes des colonnes pour groups et categories?
- une tableview pour les groupes
- une tableview pour les catégories
- et une tableview pour les éléments.
- à chaque fois que tu changes la sélection dans le browser pays/région/département, tu reconstruit ta liste des éléments
- et si j'ai bien compris, à chaque fois que tu changes la sélection dans la tableview des groupes ou dans la tableview des catégories, tu changes le tri dans la tableview des éléments (encore que je me demandes pourquoi on ne pourrait pas trier directement en cliquant sur les entêtes des colonnes concernées ???)
et comme ça, ça devrait rouler...
Pourtant, j'ai NSLogué le array qui le remplit, il est parfait.
Le datasource est bine connecté.
Les identifiers sont bien renseignés dans IB.
Outlet tableView bien connecté portant le même nom.
A vrai dire, j'ai 2 tableView gérés par les méthodes de datasource. Il faut bien faire comme ça :
Pas de plantage, mais la tableView semble réagir avec scroller, mais n'affiche rien... :why?:
Si quelqu'un a une idée sur le pourquoi de cette réaction ? Parce qu'ils sont chacun dans une classe indépendante l'une de l'autre avec des méthodes datasources dans chaque classe...
D'autres part, il semblerait que mes 2 tableView (ds une meme classe) de veulent pas avoir toutes les 2 mainController pour datasource. C'ets le dernier connecté au datasource qui prend le pas sur l'autre...
Qui a une explication rationnelle à cela ?
Dans ton initialisation, est-ce que tu fais bien un reloadData sur ta tableview après avoir initialisé ton array ?
Je pensais que le reload data c'était que quand on modifie le contenu du tableau non ?
Oui justement, le contenu de ta tableView tu le modifies dès le début, en initialisant ton array, ce qui signifie qu'il faut ensuite rafraichir ta tableView pour la mettre à jour selon les modifs de ton array.
Mercy Eddy !
Par hasard, tu n'aurais pas la méthode qui permet de modifier la largeur d'une colonne ? Je n'ai rien trouvé ds la doc à part sizeToFit qui ne fait pas cela...
J'ai en effet pas moyen de rédurie une colonne ds IB alors je voudrais la forcer par le code.
Suffisait de changer la taille min.
merci.
Bon, j'en reviens à mes moutons. Je suis têtu comme une bourrique, et je n'ai pas envie d'utiliser de NSBrowser pour les 3 tableaux qui découlent l'un de l'autre, mais bien 3 tableView distinctes.
Je charge mes 3 arrays qui correspondent aux 3 tableView à partir de mes 3 plists sachant que chaque enregistrement à une clé qui se rapporte à un Id d'une entrée du tableau précédent.
Ce que je veux savoir, c'est comment ça se passe au niveau du filtrage. Le tableau avec toutes les lignes est tjs construit au départ, puis on affiche ou pas des lignes suivant la sélection de la ligne du tableau précédent, ou bien il faut recontsruire un tableau provisoire à chaque nouvelle sélection ? (j'en doute, ça doit bouffer des ressources)
Pour le moment, j'ai mes 3 arrays ds mes 3 tableView et ils affichent tout.
Je voulais contrôler le filtrage avec :
qui surveille les changements de lignes sélectionnées ds mes tableView, mais comment lui faire comprendre sur quelle tableView agir et donc sur quelle ligne d'array ? Il n'y a pas de paramètres comme les méthodes datasource des tableView (row, column, atableView...).
NSTableView* table=[aNotification object];
int selected=;
etant donné que c'est DidChange
Merci Monsieur mpergand.
J'avais "peur" d'avoir besoin d'implémenter une notification en plus.
mais c'est vrai que c'est vraimant zarbi ta serie de tableViews à la chaine ;D ;D ;D
ça manque furieusement de bindings dans le coin ;D
Jettes un oeil à ces exemples
Filtering Controller est un exemple de filtrage d'un tableau géré par Binding.
Combatants (tu connais je crois) est un exemple simpliste d'interraction entre 2 controllers
Un petit mélange des 2 pourrait gérer tes tableViews non ?