J'ai une table contenant des images et des boutons. Chaque bouton a une étiquette avec un numéro différent. Tous les boutons exécutent la même méthode lorsqu'ils sont cliqués. Je vais utiliser l'étiquette du bouton sur la méthode qu'ils utilisent pour savoir sur quel bouton a été cliqué.IPHONE: bouton UITableView sur la cellule qui signale une mauvaise balise
Le problème est que l'étiquette du bouton signalée est erronée. J'imagine que lorsque les cellules sont réutilisées, quelque chose interfère avec l'étiquette.
C'est le code que je utilise pour remplir la table à la volée:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
UIButton *buyButton = [[UIButton alloc] initWithFrame:CGRectMake(220, 4, 100, 35)];
buyButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
buyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[buyButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
buyButton.titleLabel.font = [UIFont boldSystemFontOfSize:14];
[buyButton setBackgroundImage:newImage forState:UIControlStateNormal];
[buyButton addTarget:self action:@selector(buyNow:) forControlEvents:UIControlEventTouchDown];
[buyButton setTag: 1]; // I have to do this, to locate the button a few lines below
[cell addSubview:buyButton];
[buyButton release];
}
imageU = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat: @"table-pg%d",numberX]
ofType:@"jpg"]] autorelease];
cell.imageView.image = imageU;
UIButton * myButton = (UIButton *) [cell viewWithTag:1];
[myButton setTitle:NSLocalizedString(@"buyKey", @"") forState:UIControlStateNormal];
UIImage *newImage = [[[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource: @"whiteButton" ofType:@"png"]] autorelease]
stretchableImageWithLeftCapWidth:12.0f topCapHeight:0.0f];
[buyButton setTag:indexPath.row]; // the button's tag is set here
return cell;
}
et c'est la méthode AchatImmédiat ...
- (void) buyNow:(id)sender {
int index = [sender tag];
NSLog(@"button clicked = %d", index);
}
le bouton étant rapporté comme cliqué sur un cycles de 0 à 6, aucun nombre au-delà de 6 n'est jamais signalé. Je pense que cela correspond à la réutilisation des cellules, pourquoi le nombre ne change pas, c'est un mystère.
Comment résoudre ce problème?
merci pour toute aide.
Cela fonctionne-t-il si vous ne réutilisez pas les cellules? – Tim