Remplir un NSTreeView ou NSTable

Paisible.frPaisible.fr Membre
20:36 modifié dans API AppKit #1
Bonjour je suis debutant en Cocoa et je souhaiterais savoir comment faire pour remplir un NSTableView ou un NSTreeView (les noms sont peu etre pas les bons car je suis sur mon PC du travail et j'ai certainement oublie le nom exact des objets)

1) peut-on les remplir directement dans Interface Builder et comment ?
2) sinon comment le faire avec du code ?

Merci de vos conseils.

Réponses

  • schlumschlum Membre
    20:36 modifié #2
    NSTableView se remplit par un objet implémentant le protocole <NSTableDataSource> (à  relier à  l'outlet "source" dans IB)
    NSTreeView (tu veux dire NSBrowser plutôt non ??), je ne sais pas, jamais utilisé encore, mais ça doit être le même genre (NSTreeController je crois).

    Sinon, il y a les bindings, mais je ne connais pas non plus.
  • Philippe49Philippe49 Membre
    20:36 modifié #3
    dans 1193121907:

    Bonjour je suis debutant en Cocoa et je souhaiterais savoir comment faire pour remplir un NSTableView ou un NSTreeView (les noms sont peu etre pas les bons car je suis sur mon PC du travail et j'ai certainement oublie le nom exact des objets)

    1) peut-on les remplir directement dans Interface Builder et comment ?
    2) sinon comment le faire avec du code ?

    Merci de vos conseils.


    pour NSBrowser voir les articles
    • NSOutlineView & Trees
    • XML
  • psychoh13psychoh13 Mothership Developer Membre
    20:36 modifié #4
    Salut à  toi et bienvenu sur le forum !   <3 <br />
    En ce qui concerne les noms, le premier c'est bien NSTableView mais le deuxième c'est NSOutlineView :D
    Tu ne peux malheureusement pas remplir le tableau à  partir de Interface Builder (IB) parce que ce n'est pas fait pour ça. D'ailleurs, ce n'est pas toi qui remplit le tableau, pour être précis c'est le NSTableView ou le NSOutlineView qui te demande quelles données il doit insérer. Il faut définir un DataSource pour ton tableau, il s'agit d'une classe qui respecte les méthodes d'un protocole informel. Pour te conformer à  ce protocole il suffit juste d'implémenter ses méthodes.

    Dans le cas le plus simple, c'est-à -dire NSTableView, tu as au moins 2 méthodes à  implémenter dans la classe qui va faire office de data source, il s'agit de :

    - (int)numberOfRowsInTableView:(NSTableView *)aTableView;<br />- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
    


    Elles seront appelés par la NSTableView lorsque tu lui demander de mettre à  jour les données.

    La première c'est pour que la NSTableView sache combien de ligne elle a à  afficher, elle se passe elle-même en paramètre ce qui fait que tu peux utiliser une seule classe en guise de data source pour plusieurs NSTableView, et ce paramètre permettra de les différencier.

    La deuxième c'est un peu plus complexe. Le premier paramètre c'est elle-même comme précédemment. Et les deux paramètres suivants permettent de situer la case dans le tableau, le deuxième paramètre c'est pour la colonne et le troisième pour le rang.

    Les NSTableColumn possède un identifiant que tu peux modifier dans IB directement, si tu utilises une classe pour contenir les informations d'une ligne de ton tableau, par exemple, tu veux un tableau de personne, tu vas créer une classe "Personne" avec le nom, l'adresse, l'age, etc., chaque colonne représentera une information et le nom de la variable d'instance de la clase définira l'identifiant de la colonne. En faisant correspondre l'identifiant de la colonne avec la variable d'instance, tu pourras récupérer les données de tes objets directement via la méthode -valueForKey:
    De cette manière :

    - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return [[monArrayDObjets objectAtIndex:rowIndex] valueForKey:[aTableColumn identifier]];<br />}
    


    Pour NSOutlineView, le fonctionnement est à  peu prés le même à  la différence qu'il y a la notion d'objets enfants. Le protocole informel contenant les méthodes de sa data source s'appelle NSOutlineViewDataSource, de même pour NSTableView il s'agit du protocole informel NSTableDataSource.
  • Paisible.frPaisible.fr Membre
    20:36 modifié #5
    Merci a tous pour :
    - l'accueil
    - votre rapidite
    - votre indulgence vis a vis de ma question somme tout tres aproximative
    - la qualite de vos reponses.

    Vos reponses me seront trés utiles et m'ont permis de m'orienter sur la bonne voie.
    J'ai telecharger les articles NSOutlineView & Trees qui m'ont l'air tout à¡ fait adaptés et bien fait.
    Je les lirais plus tard à¡ tête reposé

    Milles merci a vous
Connectez-vous ou Inscrivez-vous pour répondre.