Sélection de coche multiple UITableView
Avoir lu une couple de questions relatives à présent, je peux obtenir la fonctionnalité de travailler. Cependant, ma liste est longue et défilement, alors quand j'ai faites défiler vers le haut et vers le bas de la sélection des coches sont tous sur la place. selectedIndexes est un NSMutableArray
. Des idées?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
[selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
[selectedIndexes addObject:[NSNumber numberWithInt:indexPath.row]];
}
else {
[selectedCell setAccessoryType:UITableViewCellAccessoryNone];
[selectedIndexes removeObject:[NSNumber numberWithInt:indexPath.row]];
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
Dans mon cellForRowAtIndexPath:
j'ai la vérification suivante.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
//Configure the cell...
NSDictionary *dictionary = [natures objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Name"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
for (int i = 0; i < selectedIndexes.count; i++) {
NSUInteger num = [[selectedIndexes objectAtIndex:i] intValue];
if (num == indexPath.row) {
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
}
else {
[cell setAccessoryType:UITableViewCellAccessoryNone];
}
}
return cell;
}
source d'informationauteur fes
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de modifier votre
cellForRowAtIndexPath
être la suivante:Vous avez besoin de le faire, car réutilisable cellule peut avoir le coche définie -- donc, vous devez la désactiver. Espérons que cette aide.
D'ailleurs, à l'aide d'un
NSSet
serait sans doute une solution plus élégante!Pour une sélection multiple, vous avez juste besoin sur
viewDidLoad
et
Pas besoin pour maintenir tableau séparé pour stocker les lignes sélectionnées.
Utiliser la méthode native
indexPathsForSelectedRows
pour obtenir des cellules sélectionnées indexPath tableau. Et il suffit de cocher arrayContains actuel IndexPath dans cellForRow méthode donnée ci-dessous: