2009-10-21 6 views
0

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.

+0

Cela fonctionne-t-il si vous ne réutilisez pas les cellules? – Tim

Répondre

2

Essayez de déplacer le code qui crée et met en place le bouton et l'ajoute à la cellule à la méthode willDisplayCell:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

Je pense que cela vous permettra de réutiliser les cellules et ont également une instance unique de la bouton dans chacun.

+0

merci! c'est tout! Vous êtes un homme! – SpaceDog

Questions connexes