Supprimer une cellule

martymarty Membre
02:19 modifié dans Vos applications #1
Bonjour,


J'ai un petit problème dont je ne trouve pas la solution.
Je dispose d'un tableau de cellule, j'aimerais rendre une cellule temporaire.
C'est à  dire qu'une fois que l'utilisateur a cliqué dessus, celle-ci s'efface.

Donc je pense que cette fonction doit se trouver dans didSelectRow :
<br />- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { <br />&nbsp;  <br />&nbsp; &nbsp; if (indexPath.section==[TabDeNom count]) {<br />&nbsp;  ...... <br />&nbsp; &nbsp; &nbsp; &nbsp; [self.maTableView beginUpdates];<br />&nbsp; &nbsp; &nbsp; &nbsp; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];<br />&nbsp; &nbsp; &nbsp; &nbsp; [self.maTableView endUpdates];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; }<br />

Je me situe au bon endroit, puisque que les log sont OK, mais la méthode pour supprimer la cellule me provoque un BAD_EXC...

Il ne prend pas le bon indexPath dans cette méthode ? ou mon code est totalement faux ?

Merci de m'aider

Réponses

  • AliGatorAliGator Membre, Modérateur
    02:19 modifié #2
    Attention entre ton beginUpdates et ton endUpdates, il faut appeler les deleteRowsAtIndexPaths certes, mais aussi mettre à  jout ton modèle de sorte que numberOfRowsAtIndexPath retourne le nouveau nombre de cellules : après le endUpdates il faut que le nombre de rows affichées et celui dans ton modèle, celui qui sera affiché quand ta tableView sera reloadée avec reloadData, corresponde.
  • martymarty Membre
    02:19 modifié #3
    Oui j'avais lu ça quelque part.
    Je vois pas comment mettre a jour mon modele, je veux enlever la section et une ligne, si je le met à  jour il n'existera plus, non ?
  • muqaddarmuqaddar Administrateur
    02:19 modifié #4
    dans 1309158137:

    Oui j'avais lu ça quelque part.
    Je vois pas comment mettre a jour mon modele, je veux enlever la section et une ligne, si je le met à  jour il n'existera plus, non ?


    Bein non, le mettre à  jour = enlever une ligne à  ton tableau, pas le détruire. Donc il existera.
  • martymarty Membre
    02:19 modifié #5
    Merci de m'aider, mais je vois pas trop ce que je dois faire pour mettre à  jour...

    La dans ma section, j'ai qu'une ligne que je supprime.
    Comme l'a signalé "AliGator", il faut redonner le nombre de lignes. J'ai donc mis :
    <br />[self.maTableView numberOfRowsInSection:0];<br />
    


    Ca ne fonctionne pas, j'ai donc mal utilisé la fonction, pourtant je définis le bon nombre de ligne, non ?
  • muqaddarmuqaddar Administrateur
    02:19 modifié #6
    Il faut mettre à  jour ton modèle, c'est-à -dire ta source de données, ton array.
    Là  tu me parles de la table, c'est à  dire, la vue.
  • martymarty Membre
    02:19 modifié #7
    Ah okay, mais le hic c'est que j'utilise pas d'array pour cette cellule.

    J'ai créé un tableau de données, puis une cellule en plus (qui est pas contenue dans mon array avec mes données). Cette cellule permet d'afficher plus de données.
    Une fois cliquée, on nà  toutes les données donc plus besoin d'en afficher plus, c'est pour ça que je veux la supprimer.
    Et je la crée de cette façon :
    <br /><br />&nbsp; &nbsp; if((indexPath.section==[tabDonnees count])&amp;&amp;(![tabDonnees count]==0)) {<br />&nbsp; &nbsp; &nbsp; &nbsp; static NSString *MoreCellIdentifier=@&quot;MoreCell&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:MoreCellIdentifier];<br />&nbsp; &nbsp; &nbsp; &nbsp; if(cell==nil) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MoreCellIdentifier] autorelease];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cell.textLabel.text=@&quot;Afficher plus&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return cell;<br />&nbsp; &nbsp; }<br />
    


    Donc je ne vois pas dans quel array je dois la supprimer ...
  • AliGatorAliGator Membre, Modérateur
    02:19 modifié #8
    Bah si c'est une cellule à  part tu prévois je sais pas moi, un BOOL qui dit si ta cellule est visible ou non, et tu retournes le bon nombre de sections/rows +/- 1 selon ce BOOL. BOOL que tu mets donc à  jour qd tu cliques.
    Enfin je sais pas tu fais comme tu veux à  toi de voir. Le tout est que numberOfRowsInSection (ou numberOfSectionsInTableView, selon si tu supprimes une section entière ou juste une row dans une section) retourne la bonne valeur selon les cas où tu veux afficher ou non la cellule.

    Mais enfin commence peut-être par supprimer la vue sans animation (ni beginUpdates et endUpdates) juste en faisant en sorte que numberOfRowsInSection (ou numberOfSectionsInTableView) retourne un nombre différent en fonction des 2 cas (et faire un reloadData pour recharger ta TblVw), une fois que ça ça sera maà®trisé tu pourras voir à  rajouter l'animation de cette suppression avec begin/endUpdates, mais chaque chose en son temps !!!!
  • martymarty Membre
    02:19 modifié #9
    D'accord, mais même en essayant de faire simple, sa fonctionne pas.
    Par exemple je supprime juste ma ligne, et je redéfinis le bon nombre de lignes :
    <br /> [self.maTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];<br />&nbsp; &nbsp;  NSString *key=[[[tabDonnees allKeys]sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section];<br />&nbsp; &nbsp;  [self.maTableView numberOfRowsInSection:[[[tabDonnees valueForKey:key] valueForKey:@&quot;voiture&quot;] count]];<br />
    


    J'ai toujours le même EXC_BAd qui dit que le nombre de rows ne correspond pas (0 inserted, 1 deleted).

  • AliGatorAliGator Membre, Modérateur
    02:19 modifié #10
    dans 1309272768:

    <br />&nbsp; &nbsp;  [self.maTableView numberOfRowsInSection:[[[tabDonnees valueForKey:key] valueForKey:@&quot;voiture&quot;] count]];<br />
    
    Gné ??? Heu tu essayes de faire quoi là  au juste en appelant toi même une méthode de dataSource que tu implémentes ?!

    Wow ça semble sacrément confus dans ta tête tout ça. Je veux dire même pas juste la manipulation des tableViews mais les principes même de DataSources et de l'implémentation d'un protocole et d'objective-C en général (non seulement tu appelles une méthode on se demande pourquoi et ce qu'elle est sensé changer, mais en plus tu lui passes des paramètres bizarres vu le contexte et tu ne récupères même pas son retour... Mais bon vu que de toute façon tu devrais même pas l'appeler...

    Reprends les bases car là  t'es en train de t'emmêler dans du n'importe quoi.
  • martymarty Membre
    02:19 modifié #11
    Ben j'avais cru comprendre que je devais faire quelque chose comme ça dans ton dernier post ( pour numberOfRowsInSection et numberOfSectionsInTableView). Désolé j'ai mal lu  B)
    Je trouvais ça aussi trés bizarre...

    En ce moment j'ai fait la suppression de cellule avec un booléen, j'aimerais pouvoir faire une animation car c'est un peu brut de supprimer directe comme ça.  Et c'est la que je bloque, pour créer l'animation.
    J'ai essayé de cette façon :
    <br />&nbsp;  afficherPlus=YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; [self.maTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];<br />&nbsp; &nbsp; &nbsp; &nbsp; [self.maTableView reloadData];<br />
    

    La 2ème ligne pose toujours problème alors que maintenant j'ai (0 inserted, 0 deleted)
Connectez-vous ou Inscrivez-vous pour répondre.