deux UItableview dans la même vue

Bonjour,



Je cherche à  integrer deux UITableView dans la même Vue.

Or je me sens confuse.Je n'ai aucune idée comment je peux les gérer et activer les cellules et tout :s



Merci image/smile.png' class='bbc_emoticon' alt=':)' />

Réponses

  • AlakAlak Membre
    Bonjour,



    Toutes les methods de UITableViewDataSource et UITableViewDelegate passe ont comme paramètres le TableView cible.



    Donc tu peux faire par exemple :


    <br />
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath<br />
    {<br />
      if([self.myFirstTableView isEqual:tableView])<br />
      {<br />
       NSLog(@&quot;TableView 1&quot;);<br />
      }<br />
      else if([self.mySecondTableView isEqual:tableView])<br />
      {<br />
       NSLog(@&quot;TableView 2&quot;);<br />
      }<br />
    }<br />
    




    ps : penses a te présenter dans la section dédié.
  • Ou bien les deux tableView ont des dataSources différents.
  • i22i22 Membre
    août 2012 modifié #4
    J'arrette pas d'obtenir des cellules vides,


    <br />
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {<br />
    	// Return the number of sections.<br />
    NSInteger nb;<br />
    	if ([self.tab1 isEqual: tableView ]){<br />
      nb =2 ;<br />
      }<br />
    else if ([self.tab2 isEqual: tableView ]) {<br />
    	 nb =2;<br />
    <br />
      }<br />
    <br />
    return nb;<br />
    }<br />
    <br />
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {<br />
    	// Return the number of rows in the section.<br />
    NSInteger nb;<br />
    	if ([self.tab1 isEqual: tableView ]){<br />
      nb =[data1count ];<br />
    }<br />
    else if ([self.tab2 isEqual: tableView ]) {<br />
      nb = [data2 count ];<br />
    <br />
    }<br />
    return nb;<br />
    }<br />
    <br />
    // Customize the appearance of table view cells.<br />
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {<br />
    // Configure the cell...<br />
      <br />
    static NSString *CellIdentifier = @&quot;Cell&quot;;<br />
      <br />
    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];<br />
    	<br />
    <br />
    <br />
      if (cell == nil) {<br />
       cell = [[[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease] ;<br />
      }<br />
    <br />
    if ([self.tab1 isEqual: tableView ]){<br />
    <br />
      cell.mylabel.text = [data1 objectAtIndex:indexPath.row];  <br />
    <br />
    }<br />
    if ([self.tab2 isEqual: tableView ]){<br />
      <br />
      cell.mylabel.text = [data2 objectAtIndex:indexPath.row];  <br />
    <br />
    }<br />
    return cell;<br />
    }<br />
    
  • i22i22 Membre
    Est ce que je dois ajouter des delegates ?? pour que les cellules deviennent activées ? sachant que j'utilise une UIViewController ?

    une autre petite question stp : comment puis je personnaliser mes tables ? :s
  • nolivnoliv Membre
    août 2012 modifié #6
    Pour que tes méthodes "numberOfSectionsInTableView:" etc. soient appelées par les TableView, il faut que la classe dans laquelle tu les as écrites soit "delegate" des TableView.



    Si tu ne sais pas comment personnaliser les tables, lis la doc ou un tuto plutôt que de demander un cours image/biggrin.png' class='bbc_emoticon' alt=':D' /> image/wink.png' class='bbc_emoticon' alt=';)' /> (je veux pas être méchant, c'est juste que la question est vague et de grande ampleur)
  • i22i22 Membre
    siiii j'ai lu des docs à  propos de la personnalisation des tables et j'ai essayé quelques tuto image/biggrin.png' class='bbc_emoticon' alt=':D' /> mais puisque ça n'a pas marché j'ai préféré m'adresser à  vous image/smile.png' class='bbc_emoticon' alt=':)' />

    Sinon pour le delegate j'ai ajouté le UITableViewDelegate dans le header image/biggrin.png' class='bbc_emoticon' alt=':D' /> et apparement ce n'est pas suffisant image/biggrin.png' class='bbc_emoticon' alt=':D' />
  • nolivnoliv Membre
    août 2012 modifié #8
    En effet, ce n'est pas suffisant, ce que tu as fait permet permet d'indiquer que la classe réponds aux différentes actions nécessaires pour une TableView, il te reste à  vraiment faire le lien en faisant un truc du genre
    maTableView.delegate = self;
    
    (ça, c'est en imaginant que le code est écrit par exemple dans la méthode viewDidLoad de ton ViewController qui contient les tables, et que tu veux que ce ViewController soit effectivement le responsable (le delegate) des tables)
  • non ce n'est pas suffisant, il faut bien préciser à  ton tableView que c'est ta classe qui le prend en charge. tu le fait soit par IB ou par code:


    <br />
    tableView.dataSource = self;<br />
    tableView.delegate = self;<br />
    
  • i22i22 Membre
    Merci beaucoup ça marche image/smile.png' class='bbc_emoticon' alt=':)' />
  • AliGatorAliGator Membre, Modérateur
    Heu sans vouloir être méchant, vu tes réponses aux posts du style "j'ai rajouté UITableViewDelegate ça devrait être suffisant" : si tu pensais que c'était comme cela que marchait la délégation, c'est qu'il te manque de grandes bases.

    Sans parler de vouloir faire un programme avec 2 TableViews d'office alors que tu ne sembles pas savoir comment une seule TableView fonctionne (puisque le problème est le même avec une seule tableView, il lui faut un dataSource également...)



    Donc peut-être serait-ce mieux de commencer avec les bases, apprendre à  construire un muret avant de vouloir construire une villa directement, apprendre les fondations avant de vouloir te lancer dans une appli de plus grande ampleur et difficulté ?

    Commence par des programmes simples et à  t'entraà®ner sur les nombreux patterns utilisés par Cocoa pour bien intégrer les principes de base, tu ne t'en sortira que mieux pour aller de l'avant ensuite. Je sais que c'est tentant de se lancer dans un gros projet d'office, mais tu risques de tomber droit dans le mur à  vouloir aller trop vite, il faut savoir prendre son temps et y aller progressivement.
  • i22i22 Membre
    Merci pour le conseil image/smile.png' class='bbc_emoticon' alt=':)' /> je suis entrain de faire des petites applications en parallèle mais le temps me presse un peu image/smile.png' class='bbc_emoticon' alt=':)' />
  • AliGatorAliGator Membre, Modérateur
    Malheureusement j'ai déjà  entendu cette excuse un bon nombre de fois (d'ailleurs c'est typiquement le genre de candidats que je rejette lors d'entretiens d'embauche).

    Si tu n'as pas le temps pour faire un truc, ne prétend pas pouvoir le faire dans le temps imparti. On est tous passés par la case débutant, c'est normal que pour un débutant cela prenne plus de temps pour réaliser la même appli que pour qqun d'expérimenté, il faut l'accepter et le prendre en compte dans les délais.





    Si les artisans qui construisent ma maison me disaient "bon on est débutants mais comme il faut finir votre maison dans un mois, bah on fait un truc vite fait sans trop comprendre ce qu'on faisait hein, histoire d'avoir un truc qui marche à  peu près dans le temps imparti"... bah je voudrais pas vivre dans ladite maison perso !



    Evidemment je préfère un maçon qui sache déjà  comment construire des fondations solides. Mais si je n'ai pas un maçon avec cette expérience sous la main (ou n'ai pas les moyens de m'en payer un) et que mon maçon est moins expérimenté, je préfère qu'il prenne plus de temps pour faire les fondations et s'assurer qu'elles soient solides, plutôt qu'il construise ces fondations dans un temps record "parce que le temps le presse un peu" et d'être sûr d'avoir non seulement un travail peu sûr au final, mais en plus un maçon qui n'aura rien appris de plus au final (et sera confronté à  la même chose sur le chantier suivant).
  • psychoh13psychoh13 Mothership Developer Membre
    'Alak' a écrit:


    Bonjour,



    Toutes les methods de UITableViewDataSource et UITableViewDelegate passe ont comme paramètres le TableView cible.



    Donc tu peux faire par exemple :


    <br />
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath<br />
    {<br />
      if([self.myFirstTableView isEqual:tableView])<br />
      {<br />
       NSLog(@&quot;TableView 1&quot;);<br />
      }<br />
      else if([self.mySecondTableView isEqual:tableView])<br />
      {<br />
       NSLog(@&quot;TableView 2&quot;);<br />
      }<br />
    }<br />
    




    ps : penses a te présenter dans la section dédié.




    Il n'est pas utile d'utiliser -isEqual: tu peux simplement utiliser ==
    <br />
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath<br />
    {<br />
      if(self.myFirstTableView == tableView)<br />
      {<br />
       NSLog(@&quot;TableView 1&quot;);<br />
      }<br />
      else if(self.mySecondTableView == tableView)<br />
      {<br />
       NSLog(@&quot;TableView 2&quot;);<br />
      }<br />
    }<br />
    




    Si -isEqual: te retourne un résultat différent de == t'es dans la merde.
Connectez-vous ou Inscrivez-vous pour répondre.