2010-06-08 4 views
0

Im ne sais pas pourquoi, mais mon UITableView, ce qui nest pas quelque chose de fantaisie, montre la répétition des lignes quand il ne devrait pas être.Mon UITableView a dupliqué des lignes

Il semble que les lignes qui sont ajoutés lorsque l'utilisateur fait défiler (à savoir les rangées qui sont hors de l'écran pour commencer) obtiennent les données pour le mauvais index de la ligne. C'est presque comme si une nouvelle cellule était retirée de la file d'attente, elle utilisait une cellule qui était "utilisée", mais n'a pas été nettoyée correctement.

Avez-vous besoin de cellules « nettoyer » qui sont de-file d'attente afin que les nouvelles cellules n'utilisent pas les cellules qui sont déjà créés?

mon code est comme ci-dessous:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; 

    MyDayCell *cell = (MyDayCell *)[tableView 
             dequeueReusableCellWithIdentifier: CustomCellIdentifier]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil]; 

     for (id oneObject in nib) 
      if ([oneObject isKindOfClass:[MyDayCell class]]) 
       cell = (MyDayCell *)oneObject; 

    } 

    NSUInteger section = [indexPath section]; 
    NSUInteger row = [indexPath row]; 
    NSArray *thisSectionItems = (NSArray*)[self.listData objectForKey: [[NSNumber alloc] initWithInt:section]]; 
    MyDayDetails *rowData = [thisSectionItems objectAtIndex:row]; 

    //setup my cells data here... 

    return cell; 
} 

Y at-il quelque chose de mal avec ce code?

Quelqu'un at-il vu quelque chose comme ça avant?

Répondre

1

Les cellules sont censées être réutilisées. Si vous souhaitez désactiver cette option, désactivez la réutilisation des cellules.

Votre problème est réellement dans le code que vous n'a pas inclure.

//setup my cells data here... 

Ce code est chargé de charger complètement chaque aspect de la cellule qui varie entre les lignes de votre table. Ces données qui apparaissent plus d'une fois? Vous devez le définir dans les cas où vous l'avez, ou l'effacer si vous ne l'avez pas.

Par exemple:

cell.textLabel.text = str ? str : @""; 

De cette façon, les mêmes quelques cellules sont utilisées encore et encore, et les cellules de table ne doivent pas nécessairement être mis en place et détruit fréquemment.

(Comme je l'ai mentionné, vous pouvez désactiver la réutilisation cellulaire. Mais vous devez faire ce travail.)

+0

ok donc cela a du sens, et c'est à peu près ce que j'ai mis en œuvre, merci pour cela – Mark

0

Je pense que je l'ai résolu, ai-je juste besoin d'ajouter une instruction else au bloc if (cell == nil) qui nettoie les valeurs remplies de cellules?

Est-ce la bonne façon de s'y prendre pour le faire?

+0

ne changent pas les valeurs que vous dans votre section « // Configurer mes données cellules ici ... » de toute façon ? Je ne pense pas que vous auriez besoin de nettoyer explicitement les valeurs peuplées en premier. –

+0

en quelque sorte, je mets juste ce qui doit être réglé, ne pas nettoyer les anciennes informations. – Mark

Questions connexes