Question débutant:comment ajouter des views differentes à  une tableview?

jazetjazjazetjaz Membre
13:49 modifié dans API UIKit #1
Bonjour,
je recherche depuis quelques jours un tutorial expliquant comment ajouter des vues differentes à  une tableview. Les seuls exemples que j'ai pu trouver et l'ajout d'une view identique. Est ce que certains membres pourraient expliquer la procédure. Merci.
Jaz

Réponses

  • Philippe49Philippe49 Membre
    juillet 2009 modifié #2
    Bienvenu Jazetjaz !

    En utilisation standard
    Le principe économique de la table view est de posséder une vue (NSCell) par colonne. Cette Cell est réutilisée par la table view pour redessiner chaque zone de la vue que constitue la colonne. Ainsi, on peut différencier les cell de chaque colonne (dans IB : Interface Builder), mais la structure reste identique par ligne.

    En utilisation custom
    Il faut sous-classer NSCell, et déclarer par le code la cell qui sera utilisée dans (chaque) colonne, c'est-à -dire faire par le code ce que l'on fait dans IB en standard.
    Après tu utilises les méthodes de représentations graphiques que tu veux dans ta NSCell ==> doc de NSCell.

  • Philippe49Philippe49 Membre
    juillet 2009 modifié #3
    Rien n'empêche ta custom cell de dessiner une image, du texte, un popup selon l'objet qui lui est transmis par la méthode dédiée du protocole NSTableDatasource , tableView: objectValueForTableColumn: row:
    Voir la doc "Control and Cell Programming For Cocoa"

    (pour habitués de Cocoa , only)
  • jazetjazjazetjaz Membre
    13:49 modifié #4
    Merci pour ta réponse.
    En fait ma tableview a déjà  des cells personalisées ( image, titre et sous titre differents pour chaque ligne ). Le problème que je n'arrive pas à  résoudre est comment appeler une view differente de chaque ligne. Voici un extrait du ViewController  qui permet de personnaliser chaque cell:

    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    - (void)viewDidLoad {
    arryData = [[NSArray alloc] initWithObjects:@Adresse et Horaires,@Localisation,@Reserver ,@Photos,@Forum,@FAQ ,@Votre Avis,@Video,nil];
    imagesList = [[NSArray alloc] initWithObjects:@1.jpg,@2.jpg,@3.jpg,@4.jpg,@5.jpg,@6.jpg,@7.jpg,@8.jpg,nil];
    descpList = [[NSArray alloc] initWithObjects:@Sous titre1,@Sous titre2,@Soustitre3,@Soustitre4,@Soustitre5,@Soustitre6,@Soustitre8,@Soustitre9,nil];

    self.title = @TitreA;
        [super viewDidLoad];
    }
    Si j'ai bien compris, les lignes de la TableView  se remplissent par l'appel de données contenus dans un Array ( image, titre et sous titre ). Comment donc ajouter un lien à  une vue differente par l'intermédiare de cet Array?
    j'espere m'etre fait comprendre et merci par avance car la je calle vraiement sur ce problème.
    Jaz

  • Philippe49Philippe49 Membre
    13:49 modifié #5
    Tu es sur iPhone ou Mac ?
  • Philippe49Philippe49 Membre
    août 2009 modifié #6
    Sur iPhone manifestement (viewDidLoad)
    Dans ce cas, regarder
    • tout ouvrage de base sur iPhone qui propose tous un chapitre sur les UITableView
    • ou un tutoriel voir dans la rubrique articles des tutoriels et des liens.
    • la doc Table View Programming Guide For IPhone OS.

    Confirme-moi que tu es bien sur iPhone que je replace ton post dans la bonne section.
  • jazetjazjazetjaz Membre
    13:49 modifié #7
    hello,
    je suis bien sur iphone.
    j'ai repris les tutoriaux concernant les tableview, mais je n'en ai pas trouvé reprenant l'appel de vue differente pour chaque ligne. Si tu en connais un à  me conseiller peut etre? Malgré Google et meme en anglais, je n'ai pas trouvé.
    Merci
    Jaz
  • bnkbnk Membre
    13:49 modifié #8
    Bienvenue jazetjaz.

    Je peux te conseiller ce tutoriel en Français pour apprendre à  utiliser les tableviews sur iPhone: http://www.ipup.fr/page.php?id=352

    bon courage ;)
  • Philippe49Philippe49 Membre
    13:49 modifié #9
    L'UITableView n'est pas vraiment fait pour cela. Cependant, il est tout à  fait possible de définir et customiser plusieurs dequeueReusableCellWithIdentifier: dans la méthode tableView: cellForRowWithIndexPath: du datasource.


    tableView:cellForRowAtIndexPath:
    Asks the data source for a cell to insert in a particular location of the table view.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    Parameters
    tableView
    A table-view object requesting the cell.
    indexPath
    An index path locating a row in tableView.
    Return Value
    An object inheriting from UITableViewCell that the table view can use for the specified row. An assertion is raised if you return nil.
    Discussion
    The returned UITableViewCell object is frequently one that the application reuses for performance reasons. You should fetch a previously created cell object that is marked for reuse by sending a dequeueReusableCellWithIdentifier: message to tableView. The identifier for a reusable cell object is assigned when the delegate initializes the cell object by calling the initWithFrame:reuseIdentifier: method of UITableViewCell. Various attributes of a table cell are set automatically based on whether the cell is a separator and on information the data source provides, such as for accessory views and editing controls.


    Mais là , même si ce n'est pas si complexe une fois qu'on la fait, il va te falloir plus que des tutoriaux : livres + doc Apple .

    Si ce n'est pas indiscret, que veux-tu en faire ?
  • yoannyoann Membre
    13:49 modifié #10
    Il va falloir en effet utiliser plusieurs CellID et fournir le bon type de celle en fonction, le système des CellID est fait pour ça, ou s'il n'y a pas de grosse différence entre chaque type de cell tu peut mettre tout sur un seul modèle et utiliser les property hidden, à  voir en fonction du besoin.
  • jazetjazjazetjaz Membre
    13:49 modifié #12
    Bonjour,
    je reformule ma question :
    j'ai une tableview que j'ai remplie avec un array. ( image, titre et sous titre )
    Je souhaite acceder à  une vue differente à  partir de ma tableview pour chaque ligne.
    Si quelqu'un a un tutorial à  m'indiquer explicitant ce cas??
    Je souhaite utiliser ma tableview comme menu.
    Merci par avance
    jAZ
  • Philippe49Philippe49 Membre
    13:49 modifié #13
    Le template du UITableViewController fournit déjà  le code suivant , utilisable tel quel dans le cas d'un UINavigationController, et qu'il faut transforme un peu autrement.


    Le princi
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {<br />	NSLog(@&quot;did select&quot;);<br />	// Navigation logic may go here. Create and push another view controller.<br />	AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@&quot;AnotherView&quot; bundle:nil];<br />	// ligne spécifique à  l&#39;utilisation d&#39;un navigationController<br />	[self.navigationController pushViewController:anotherViewController];<br />	[anotherViewController release];<br />}
    



    Pour un exemple, on pourra voir  l'exemple Apple SimpleDrillDrown, le le tuto du Ranch ou celui d'iPup, ou celui de Stanford University, ou ...
  • jazetjazjazetjaz Membre
    13:49 modifié #14
    Hello,
    J'ai bien refait les tutos proposés concernant les tableviews;
    Quel est le code à  utiliser pour que ma View1 soit appelée par ma ligne du tableau1, que ma View2 soit appelée par la deuxième ligne du tableau?
    il suffit de déclarer mes views dans mon RootViewController à  la suite ??
    C'est là  ou je suis perdu.
    extrait de mon code de mon RootViewController.m

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        // Navigation logic may go here. Create and push another view controller.
    NSString *valeurDeLigne=[monTableau objectAtIndex:indexPath.row];
    AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@AnotherView bundle:nil];
    anotherViewController.monMenu=valeurDeLigne;
    [self.navigationController pushViewController:anotherViewController animated:YES];
    [anotherViewController release];
    }

  • Philippe49Philippe49 Membre
    13:49 modifié #15
    Je crois que tu devrais lire le post de Jerome57. Vous me semblez tous les deux victimes du même syndrome.

    Je vous conseille à  tous les deux de prendre un livre qui structure tout cela, l'expérience montrant qu'on ne peut pas aller très loin avec simplement des tutos.

  • jazetjazjazetjaz Membre
    13:49 modifié #16
    hello,
    merci pour ta réactivité; j'ai acheté le livre Programmation COCOA dAaron Hillegas.Merci du conseil.
    Est ce que certains d'entre vous pourraient me conseiller pour appeller mes differentes vues dans l'ordre des lignes de mon tableau?
    Merci par avance
    Jaz

Connectez-vous ou Inscrivez-vous pour répondre.