J'ai une implémentation personnalisée UITableViewCell (tirant parti des étiquettes comme sous-vues) qui rend la liste des éléments correctement, mais quand je descends et sélectionne un élément (disons le numéro 43 sur 100), je vois un rendu d'une cellule plus tôt dans la liste (par exemple, le numéro 3 sur la première page de rendu dans le tableau) apparaissent en haut de la cellule que j'ai sélectionnée.UITableViewCell écrasé lors de la sélection?
Voici ma méthode:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
// index of table view correlates to index of array
Card *card = [cards objectAtIndex:indexPath.row];
UILabel *cardNameLbl = [[[UILabel alloc] initWithFrame:CGRectMake(10.0, 3.0, 200.0, 18.0)] autorelease];
cardNameLbl.tag = CARD_NAME_TAG;
cardNameLbl.text = card.name;
cardNameLbl.font = [UIFont systemFontOfSize:12.0];
cardNameLbl.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cardNameLbl];
UILabel *cardNumLbl = [[[UILabel alloc] initWithFrame:CGRectMake(10.0, 21.0, 100.0, 18.0)] autorelease];
cardNumLbl.tag = CARD_NUM_TAG;
cardNumLbl.text = card.number;
cardNumLbl.font = [UIFont systemFontOfSize:12.0];
cardNumLbl.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cardNumLbl];
UILabel *cardTypeLbl = [[[UILabel alloc] initWithFrame:CGRectMake(110.0, 21.0, 200.0, 18.0)] autorelease];
cardTypeLbl.tag = CARD_TYPE_TAG;
cardTypeLbl.text = card.type;
cardTypeLbl.font = [UIFont systemFontOfSize:12.0];
cardTypeLbl.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cardTypeLbl];
UILabel *cardQuantityLbl = [[[UILabel alloc] initWithFrame:CGRectMake(250.0, 3.0, 50.0, 18.0)] autorelease];
cardQuantityLbl.tag = CARD_QUANTITY_TAG;
cardQuantityLbl.text = [NSString stringWithFormat:@"%d", card.have];
cardQuantityLbl.font = [UIFont systemFontOfSize:12.0];
cardQuantityLbl.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:cardQuantityLbl];
return cell;
}
Oui, je pense que vous avez raison à propos de la cellule qui conserve les anciennes données ... Je trouve juste étrange que cela soit déclencheur sur une sélection de cellules. Savez-vous quelles méthodes sont déclenchées quand select est appelé qui déclencherait un rendu? Je ne pense pas que tableView: didSelectRowAtIndexPath: le fait. – Greg
Dans la classe UITableViewCell, il y a une méthode appelée: - (void) setSelected: (BOOL) a choisi animé: (BOOL) animé Mais je ne sais pas pourquoi ce serait à l'origine des sous-vues pour devenir mal ordonnée. –
J'ai implémenté une sous-classe de UITableViewCell et je n'ai plus ce comportement. Étrange ... aimerais toujours comprendre cela. – Greg