Plusieurs coche lors de la ligne sélectionnée dans UITableView IOS
J'ai un UITableView
qui affiche des coches lorsqu'une ligne est sélectionnée. Le problème est que Lorsque je sélectionne une ligne dans didSelectRowAtIndexPath
et ajouter une coche sur la ligne sélectionnée, il ajoute une coche. Voici mon code
Toute aide serait très appréciée.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
//Configure the cell...
cell.textLabel.text=[[Model.category objectAtIndex:indexPath.row] categoryName];
cell.imageView.image=[[Model.category objectAtIndex:indexPath.row]categoryImage];
//cell.detailTextLabel.text =@"Breve Descripción de la categoria";
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([self.tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark) {
[self.tableView cellForRowAtIndexPath:indexPath].accessoryType =UITableViewCellAccessoryNone;
[self.cellSelected removeObject:indexPath];
}else {
[tableView cellForRowAtIndexPath:indexPath].accessoryType=UITableViewCellAccessoryCheckmark;
[self.cellSelected addObject:indexPath];
}
[self checkMark];
[tableView reloadData];
}
- (void)checkMark{
for (NSIndexPath * indexPath in self.cellSelected) {
[self.tableView cellForRowAtIndexPath:indexPath].accessoryType=UITableViewCellAccessoryCheckmark;
}
}
OriginalL'auteur Klinkert0728 | 2014-05-18
Vous devez vous connecter pour publier un commentaire.
[self.tableView cellForRowAtIndexPath:indexPath]
appel dans ledidSelectRowAtIndexPath
ne sera pas de retour exacte de la cellule. Il peut être même cellule, une cellule ou réutilisée de la cellule. Si c'est un réutilisés cellule à son accessoire de vue a une coche, vous finirez par avoir deux cellules avec coche.Son mieux pour stocker dans le tableau et l'utiliser en conséquence. Si vous prévoyez d'avoir de multiples sélections, Utilisez l'exemple de code ci-dessous.
Je vais avoir le même problème, mais avec une Image, j'ai une image pour chaque cellule et lorsque je sélectionne une ligne j'ai besoin de changer l'image de la ligne sélectionnée, mais quand je change de cette image, également un autre changement d'image peut-être vous pouvez m'aider
désélectionnez l'option est de supprimer la mise en surbrillance de comportement lorsque vous appuyez sur la cellule.
Klinkert0728 Besoin de regarder votre code pour trouver le problème auquel vous êtes confronté.
Naveen Prasad j'ai déjà résolu le problème
OriginalL'auteur Naveen Prasad R
Suffit d'utiliser
didSelectRowAtIndexPath
etdidDeselectRowAtIndexPath
méthodes et votre table view controller instance.OriginalL'auteur Metin Guler
Essayez ceci:
Déclarer dans votre .m fichier:
Dans
tableView:cellForRowAtIndexPath:
vérifier si indexPath est le même que stockées dans ivar:Dans
tableView:didSelectRowAtIndexPath
magasin pointeur vers sélectionné NSIndexPath ou nil si la cellule a été désélectionnerJe l'ai écrit sans vérifier dans Xcode, il pourrait donc y avoir quelques fautes de frappe, mais je montre idée principale.
À mon avis, vous ne devez pas appeler
[self checkMark];
dans votretableView:cellForRowAtIndexPath:
méthode.D'ailleurs si vous voulez avoir une seule cellule à la fois, vous devriez pas créer
NSMutableArray
pour stockerNSIndexPath
. Il semble que la vôtrecellSelected
magasins 2NSIndexPaths
à un moment, c'est pourquoi vous avez ce comportement étrange.Si vous voulez avoir une seule cellule sélectionnée à la fois, ne pas utiliser de NSMutableArray. Juste NSIndexPath. NSMutableArray prend beaucoup plus de place en mémoire, donc il n'est pas nécessaire de l'utiliser ici. De plus lors de l'utilisation de NSIndexPath vous permettra de vous assurer qu'un seul pointeur vers NSIndexPath seront stockées, et au cours de votre tableView de recharger des données, seulement un ou zéro UITableViewCell sera sélectionné.
OriginalL'auteur Neru