2011-12-01 3 views
0

J'ai des problèmes avec les cellules supérieures et inférieures de UITableView qui alternent chaque fois qu'elles défilent à l'écran. Je crois que c'est un problème avec reuseIdentifier mais je ne suis pas sûr de savoir comment le contourner. PlaceTableViewCell est une sous-classe de ABTableViewCell de Loren Britcher pour un défilement rapide.UITableView reuseIdentifier: Répétition d'éléments en haut et en bas

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *uniqueIdentifier = @"Cell"; 

    PlaceTableViewCell *cell = (PlaceTableViewCell *)[tableView dequeueReusableCellWithIdentifier:uniqueIdentifier]; 


    if(cell == nil){ 
     cell = [[PlaceTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:uniqueIdentifier]; 
    } 

    Places *place = [self.placesArray objectAtIndex:[indexPath row]];  
    cell.place_title = place.title; 
    cell.place_street = place.street; 
    cell.place_thumb = place.thumb_path; 


    return cell; 

} 

Edit:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.placesArray count]; 
} 

De ma sous-classe de ABTableViewCell:

- (void)drawContentView:(CGRect)r 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    UIColor *backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 
    UIColor *textColor = [UIColor blackColor]; 

    if(self.selected) 
    { 
     backgroundColor = [UIColor clearColor]; 
     textColor = [UIColor whiteColor]; 
    } 

    [backgroundColor set]; 
    CGContextFillRect(context, r); 

    CGPoint p; 
    p.x = 42; 
    p.y = 2; 

     NSLog(@"place_thumb: %@", place_thumb); 

     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:place_thumb]]; 
     UIImage *image = [UIImage imageWithData:imageData]; 
     [image drawAtPoint: p]; 


     p.x = p.x + 50; 

     [textColor set]; 
     [place_title drawAtPoint:p withFont:place_titleFont]; 

     p.y = 25; 

     textColor = [UIColor lightGrayColor]; 
     [textColor set]; 
    [place_street drawAtPoint:p withFont:place_streetFont]; 

} 
+0

Quel est le problème que vous rencontrez? – john

+0

Si vous faites défiler vers le bas et revenez en haut, le dernier élément prend la place du premier élément. Si vous faites défiler vers le haut et vers le bas, le contraire se produit (le premier élément devient le dernier) –

+0

Sont-ils tous dans la même section? – john

Répondre

0

Votre cellForRowAtIndexPath semble être correct. Vous devez publier toutes vos méthodes de source de données pour UITableView. J'ai l'intuition que le problème pourrait se produire dans votre méthode numberOfRows.

Définissez-vous le nombre de lignes en fonction de la taille du tableau? Etes-vous sûr que votre tableau reste inchangé?

+0

Le tableau est resté inchangé ... J'ai également posté le drawContentView Je soupçonne peut-être la racine du problème ... pourrait le chargement de l'image avec dataWithContentsOfURL sur le même thread causer un décalage qui le ferait faire cela? –

+0

effectivement j'ai essayé de charger une image statique au lieu d'une image à distance et le problème a persisté ... –

+0

Hmm c'est assez déroutant. Que se passe-t-il lorsque vous définissez des identifiants différents pour chaque cellule? Juste pour l'expérimentation, utilisez l'indexPath.row comme cellIdentifier. Si la duplication se produit toujours, nous pouvons exclure les méthodes de source de données de la vue table qui posent problème. – Sid

Questions connexes