IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Probleme image "fantome" dans un UITableView


Sujet :

Objective-C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 64
    Points : 53
    Points
    53
    Par défaut Probleme image "fantome" dans un UITableView
    Salut à tous,

    J'ai un problème bizarre dans une UITableView. Tout d'abord je donne le code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    	static NSString *CellIdentifier = @"Cell";
     
    	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     
    	if(cell == nil)
    		cell = [self getCellContentView:CellIdentifier];
     
    	// Set background
    	UIImageView *imageTemp = (UIImageView *)[cell viewWithTag:1];
    	imageTemp.image = [UIImage imageNamed:@"image.png"] ;
     
    	// Set texts
    	imageTemp = (UIImageView *)[cell viewWithTag:2];
    	UIImage* image = [m_SuccesTexts objectAtIndex:indexPath.row];
    	float width = image.size.width ;
    	float height = image.size.height ;
    	CGRect ImageFrame ;
    	// Limiter la lageur
    	if(width > 170)
    	{
    		width = 170;
    	}
    	// Placer en fonction de si le texte fait une ligne ou deux
    	if(height > 50)
    	{	
    		ImageFrame = CGRectMake(70, 35, width, height);
    	}
    	else 
    	{
    		ImageFrame = CGRectMake(70, 50, width, height);
    	}
    	imageTemp.frame = ImageFrame;
    	imageTemp.image = image;
     
    	int test = indexPath.row ;
     
    	// Set image1
    	if([[m_stats objectAtIndex:indexPath.row]intValue] >= 3)
    	{
    		imageTemp = (UIImageView *)[cell viewWithTag:3];
    		imageTemp.image = [m_SuccesBronze objectAtIndex:indexPath.row];
    	}
    	// Set image2
    	if([[m_stats objectAtIndex:indexPath.row]intValue] > 10)
    	{
    		imageTemp = (UIImageView *)[cell viewWithTag:4];
    		imageTemp.image = [m_SuccesSilver objectAtIndex:indexPath.row];
    	}
    	// Set image3
    	if([[m_stats objectAtIndex:indexPath.row]intValue] > 15)
    	{
    		imageTemp = (UIImageView *)[cell viewWithTag:5];
    		imageTemp.image = [m_SuccesGold objectAtIndex:indexPath.row];
    	}
     
    	imageTemp = nil ;
     
    	return cell;
    }
     
    - (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {
     
    	CGRect CellFrame = CGRectMake(0, 0, SCREEN_WIDTH, 110);
    	CGRect BackgroundFrame = CGRectMake(0, 0, SCREEN_WIDTH, 110);
    	CGRect bronzeFrame = CGRectMake(245, 50, 55, 55);
    	CGRect silverFrame = CGRectMake(305, 50, 55, 55);
    	CGRect goldFrame = CGRectMake(365, 50, 55, 55);
    	UIImageView *imageTemp ;
     
    	UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CellFrame reuseIdentifier:cellIdentifier] autorelease];
     
    	// Initialize background
    	imageTemp = [[UIImageView alloc]init];
    	imageTemp.tag = 1;
    	imageTemp.frame = BackgroundFrame ;
    	[cell.contentView addSubview:imageTemp];
    	[imageTemp release];
     
    	// Initialize text
    	imageTemp = [[UIImageView alloc]init];
    	imageTemp.tag = 2;
    	[cell.contentView addSubview:imageTemp];
    	[imageTemp release];
     
    	// Initialize image1
    	imageTemp = [[UIImageView alloc]init];
    	imageTemp.tag = 3;
    	imageTemp.frame = bronzeFrame ;
    	[cell.contentView addSubview:imageTemp];
    	[imageTemp release];
     
    	// Initialize image2
    	imageTemp = [[UIImageView alloc]init];
    	imageTemp.tag = 4;
    	imageTemp.frame = silverFrame ;
    	[cell.contentView addSubview:imageTemp];
    	[imageTemp release];
     
    	// Initialize image3
    	imageTemp = [[UIImageView alloc]init];
    	imageTemp.tag = 5;
    	imageTemp.frame = goldFrame ;
    	[cell.contentView addSubview:imageTemp];
    	[imageTemp release];
     
    	return cell;
    }

    Quand ma cellule se charge via "cellForRowAtIndexPath" je set les images avec des images contenues dans un tableau en fonction des valeurs contenues dans un autre tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Si la valeur est supérieur a 3
    if([[m_stats objectAtIndex:indexPath.row]intValue] >= 3)
    	{
                              // On affiche l'image dans le tableau au meme index que la cellule
    		imageTemp = (UIImageView *)[cell viewWithTag:3];
    		imageTemp.image = [m_SuccesBronze objectAtIndex:indexPath.row];
    	}

    J'ai set seulement la premier valeur au dessus de 3.
    Le problème est que cette image s'affiche plus d'une fois, comme une image "fantome". Fantome car l'image s'affiche sans que le programme ne passe dans la condition.

    Voici des images qui expliqueront un peu mieux que moi le phenomène ^^:
    Sur celle ci nous somme en haut de la tableview, l'image s'affiche, et elle ne doit s'afficher qu'ici(le petit carré avec le bateau dedans) :
    http://uppix.net/2/f/a/bf72e8aacafbc...bec3659d3c.png

    Sur celle la l'image se réaffiche et c'est anormal( ne passe pas dans la condition qui set l'image, mauvaise image pour la cellule par rapport au tableau d'image ... de plus vous pouvez remarquer que le problème arrive sur la case chargée seulement lorsqu'on bouge la vue, cette case n'est pas chargée lors du premier affichage de la tableview puisque non-visible).

    http://uppix.net/6/3/7/c0f1420302d76...865eea420d.png

    Bref j'ai l'impression de m'etre un peu perdu dans les explications, mais j'espere vraiment trouvé pourquoi ce phénomène arrive alors si vous avez besoins de précision n'hésitez pas à demander svp.

    Voila je vous remercie d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    L'objet UITableViewCell qui sert à afficher le contenu des éléments de la table est recyclé pour des raisons de performance, ce qui signifie qu'il ne suffit pas dire ce qu'il faut afficher quand la condition est remplie mais aussi ce qu'il ne faut pas afficher quand elle ne l'est pas…

    donc il manque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    else
        imageTemp.image = nil ; // ou une image symbolisant ce qu'est le "vide" dans votre app…
    quand la valeur est < 3.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 64
    Points : 53
    Points
    53
    Par défaut
    Je me doutais que c'etait quelque chose comme ca alors j'avais mis imageTemp = nil ... mais ca marchait pas, j'avais pas penser a imageTemps.image.

    Merci beaucoup ^^

Discussions similaires

  1. [CKEditor] probleme d'image; ajout de quot lors d'insertion d'image
    Par dedel53 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 28/10/2007, 00h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo