2009-09-01 2 views
0

Ceci est ma fonction cellForRowAtIndexPath. Je ne pouvais pas obtenir le setText à l'étiquette pour travailler. Pouvez vous me donner un coup de main?iphone sdk: Impossible de réutiliser la cellule avec viewWithTag (impossible de définirText pour les étiquettes réutilisées)

// Customize the appearance of table view cells. 

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

    static NSString *CellIdentifier = @"Cell"; 
    UILabel *messageLabel = nil; 
    int row = [indexPath row]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 

     cell = [[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 320, ROWHEIGHT) reuseIdentifier:CellIdentifier]; 
     messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, 5, 240, 60)]; 
     [messageLabel setFont:[UIFont fontWithName:@"ArialMT" size:12]]; 
     [messageLabel setTextColor:[UIColor blackColor]]; 
     [messageLabel setBackgroundColor:[UIColor clearColor]]; 
     [messageLabel setNumberOfLines:3]; 
     [messageLabel setLineBreakMode:UILineBreakModeWordWrap]; 
     [messageLabel setTag: messageTag]; 

     [cell.contentView addSubview:messageLabel]; 

    } 
    else{ 
     messageLabel = (UILabel *)[cell viewWithTag:messageTag]; 

    } 

    [messageLabel setText:[[[aSingleton wallItemArray] objectAtIndex:row] message]]; 

    NSLog(@" -- > at row %d, message: %@", row, [[[aSingleton wallItemArray] objectAtIndex:row] message]); 

    return cell; 
} 

Répondre

2

Vous ajoutez le UILabel à contentView de la cellule, mais demander la cellule pour la vue.

Avez-vous essayé:

messageLabel = (UILabel *)[cell.contentView viewWithTag:messageTag]; 

EDIT: En outre, vous avez deux fuites de mémoire - vous êtes alloc « ing un UITableViewCell et un UILabel sans (auto) de les libérer partout.

+0

Oui je l'avais essayé, mais je suis arrivé l'erreur d'exécution: application Terminating en raison d'exception uncaught 'NSInvalidArgumentException', raison: '*** - [UIView setText:]: sélecteur non reconnu envoyé à l'instance 0xf4a0c0' Comment venir ça le recompose comme un UIView pas un UILabel ...? – RoundOutTooSoon

+0

Ah, dans ce cas, vous ne récupérez pas votre instance d'origine - à quoi la valeur 'messageTag' est-elle définie? S'il duplique la balise d'une autre vue (par exemple, toutes les balises de la vue sont nuls, sauf si vous les modifiez), vous obtiendrez la mauvaise vue. – iKenndac

+0

U sais Ken, j'ai mis le messageTag à 0 et cela a causé mon problème. Je l'ai changé pour un nombre aléatoire 342343 et ça marche !!!! Yeehaaa !!! Ce problème m'a fait perdre tellement de temps jusqu'à ce que tu me répondes Ken. Merci beaucoup! Puis-je vous acheter une boisson ou quelque chose :) "par exemple, toutes les étiquettes de vue sont nulles sauf si vous les changez" des informations très précieuses! Merci Ken! – RoundOutTooSoon