Question

J'ai un TableView contenant une liste de noms d'utilisateurs qui sont indexés en sections et en lignes de manière alphabétique. Lorsque je puise sur l'une des lignes d'une section, le bon utilisateur est ajouté à mon tableau des destinataires et une coche est des places dans la cellule en plus de leur nom. Mais une coche est également affichée à côté d'autres noms d'utilisateur qui n'ont pas été sélectionnés et ne sont pas dans le tableau des destinataires. J'ai essayé de réaffecter la cellule sélectionnée avec un nouveau IndexPath (voir le code ci-dessous) mais je n'ai pas pu le faire fonctionner. Il enregistre le chemin correct, mais ne l'affectera pas. J'utilise une méthode similaire pour attribuer aux utilisateurs les lignes dans chaque section sans problème, mais pour une raison quelconque, les marques d'accessoires me posent des problèmes. J'ai vu d'autres fils sur Overflow sur ce même sujet, mais lavez-vous; Des indices? à votre santé!

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    int row = indexPath.row;
    int section = indexPath.section;
    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:row inSection:section];

    [tableView deselectRowAtIndexPath:newIndexPath animated:NO];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:newIndexPath];

    NSArray *array = [self.sectionsArray objectAtIndex:indexPath.section];
    PFUser *user = [array objectAtIndex:indexPath.row];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [self.recipients addObject:user];
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [self.recipients removeObject:user];
    }

    [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (error) {
            NSLog(@"Error %@ %@", error, [error userInfo]);
        }
    }];

Et voici le CellForrowatindexpath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Get the user names from the array associated with the section index in the sections array.
    NSArray *userNamesInSection = (self.sectionsArray)[indexPath.section];

    // Configure the cell with user name.
    UserNameWrapper *userName = userNamesInSection[indexPath.row];
    cell.textLabel.text = userName.user;

    return cell;
}
Était-ce utile?

La solution

Comme je le vois, vous avez commis 2 erreurs dans CellForrowatindexpath qui n'ont pas vérifié si la cellule est nul pour en créer une et définir le type d'accessoire pour la cellule selon la liste des destinataires.

Vous devriez faire comme ci-dessous:

NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

PFUser *user = [self getUserAtIndexPath:indexPath];
cell.textLabel.text = user.name;

if ([self.recipients containObject:user]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else {
    cell.accessoryType = UITableViewCellAccessoryNone;
}

return cell;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top