2010-08-15 8 views
2

J'utilise des boutons personnalisés dans le tableau vue et cela fonctionne bien pour moi:iPhone SDK: boutons personnalisés dans TableView

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

    UIImage *detailsButtonImage; 
    UIButton *detailsButton; 

    NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    //populate cells with array elements 
    cell.textLabel.text = [itemsArray objectAtIndex:indexPath.row]; 

    //a custom button 
    detailsButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    detailsButtonImage = [UIImage imageNamed:@"details.png"]; 
    [detailsButton setBackgroundImage:detailsButtonImage forState:UIControlStateNormal]; 
    detailsButton.frame = CGRectMake(275, 10, 20, 22); 

     //which cell was tapped? 
    [detailsButton setTag:[itemsArray objectAtIndex:indexPath.row]]; 
    [detailsButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:detailsButton]; 
     return cell; 
} 

//showing details of selected item 
- (void) showDetails:(id)sender 
{ 
    AnotherViewController *anotherViewController = [[AnotherViewController alloc] init]; 
    anotherViewController.title = [sender tag]; 
    anotherViewController.itemDescription = [itemsDescriptions objectAtIndex:[itemsArray indexOfObjectIdenticalTo:[sender tag]]]; 

    [self.navigationController pushViewController:anotherViewController animated:YES]; 
    [anotherViewController release]; 
} 

Je suis curieux de savoir s'il y a une autre façon d'envoyer un identifiant de cellule à AnotherViewController sauf définir une étiquette.

Répondre

1

Il semble que vous voulez voir les détails pour savoir quel bouton l'a poussé. Je pense que la façon dont vous le faites est bien, mais si vous vouliez vous pourriez avoir une fonction

  • (void) showDetails: (id) expéditeur withObject: objet (id);

et appelez cela avec votre bouton plutôt que de simplement afficher les détails: (id) expéditeur; Je déduis que vos objets sont des chaînes de ce que vous faites, il pourrait être

  • (void) showDetails: (id) expéditeur withString: (NSString *) chaîne;

Mais honnêtement, la façon dont vous le faites en ce moment est bien, pourquoi changer?

+0

J'ai entendu dire que "setTag" pouvait être remplacé par l'envoi d'un objet via la cible du bouton, mais je suis perplexe car il y a déjà un ensemble de cibles. – ufw

Questions connexes