Bonjour à tous,

Je suis nouveau sur ce forum. Je me suis lancé dans la prog iOS il y a un peu moins de 6 mois donc je suis un peu nouveau aussi dans ce genre de dev

Dans une de mes applications, j'ai une UITableView référençant toutes les actualités récupérées via un flux RSS. Je récupère bien toutes les données et les met dans une classe Actualite, objet réutilisé ensuite pour créer chacune des cellules de la liste.
J'aimerais pouvoir griser une cellule quand elle a été lu par l'utilisateur (quand l'utilisateur clique dessus pour la 1ère fois donc).

J'ai réussi à la griser quand je clique dessus, le problème c'est que plusieurs autres cellules se grisent aussi dessous alors que je n'ai pas cliqué encore dessus.
Mon objet actualité comporte un booléen isRead qui est pourtant bien à YES ou NO en fonction de si la cellule a déjà été cliqué ou pas donc le problème ne vient pas de là. En lisant pas mal de choses sur ce genre de problème, j'ai cru comprendre que ca venait d'un mauvais rechargement des cellules mais je n'ai rien trouvé de plus

Voici ma facon d'initialiser ma UITableView :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ActualiteCell *cell = (ActualiteCell *) [tableView dequeueReusableCellWithIdentifier:ACTUALITECELL_ID];
	if(cell == nil)
	{
		[[NSBundle mainBundle]loadNibNamed:ACTUALITECELL_ID owner:self options:nil];
 
		cell = [loadedCell retain];
		loadedCell = nil;
		[cell autorelease];
	}
 
    [self configureCell:cell atIndexPath:indexPath];
 
	return cell;
}
 
- (void)configureCell:(ActualiteCell*)cell atIndexPath:(NSIndexPath*)indexPath {
    MyAppDelegate* delegateAppli = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
 
    // Contenu de la cellule
    cell.actu = [[delegateAppli listeActualites] objectAtIndex:indexPath.row];
}
J'ai surchargé le setter de la cell pour qu'il mette à jour chacun des champs de la cellule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
- (void) setActu:(Actu *)aActu {
    if (aActu != actu) {
        [actu release];
        actu = [aActu retain];
	}
    [self refreshUI]; // On met à jour les champs de la cellule
}
Et pour colorer la cellule, je le fais comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MyAppDelegate* delegateAppli = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
    DetailActualiteViewController* vc = [[DetailActualiteViewController alloc] initWithNibName:@"DetailActualiteViewController" bundle:nil];
    vc.actu = [[delegateAppli listeActualites] objectAtIndex:indexPath.row];
 
    [self.tableView beginUpdates];
    [[[delegateAppli listeActualites] objectAtIndex:indexPath.row] setIsRead:YES];
    [self configureCell:(ActualiteCell *)[self.tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
    [self.tableView endUpdates];
 
    [self.navigationController pushViewController:vc animated:YES];
}
pour votre aide !

Bonne journée !
Sébastien