101 votes

Utilisation didSelectRowAtIndexPath ou méthode prepareForSegue pour UITableView?

J'utilise les storyboards et j'ai un UITableView. J'ai un segue d'installation qui pousse à partir de mon tableau pour le détail de la VC. Mais quelle méthode dois-je utiliser pour gérer cela? Je vais avoir à passer une couple d'objets à la vue de détail. Mais dois-je utiliser didSelectRowAtIndex ou -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender?

199voto

rob mayoff Points 124153

Si vous utilisez prepareForSegue:sender:alors vous n'aurez pas autant de changement si plus tard vous décidez de déclencher la séquence à partir d'un certain contrôle à l'extérieur de l'affichage de la table.

L' prepareForSegue:sender: message est envoyé à la vue du contrôleur, donc, je proposerais quelque chose comme ceci:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Assume self.view is the table view
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    DetailObject *detail = [self detailForIndexPath:path];
    [segue.destinationViewController setDetail:detail];
}

Dans Swift:

override func prepareForSegue(_ segue: UIStoryboardSegue, sender sender: AnyObject?) {
    let path = self.tableView.indexPathForSelectedRow()!
    segue.destinationViewController.detail = self.detailForIndexPath(path)
}

5voto

rohit mandiwal Points 4883

Je l'ai fait et cela a fonctionné

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"Row Selected = %i",indexPath.row);

    [self performSegueWithIdentifier:@"testID" sender:self.view];    
}

0voto

Eugene Points 11

Si vous utilisez prepareForSegue: vous pouvez vérifier qui est l'expéditeur et exécuter un code différent

Par exemple, dans swift

override func prepareForSeque(seque: UiStoryboardSeque, sender: AnyObject?)
{
   var senderIsTableviewCell:Bool! = sender?.isKindOfClass(UITableViewCell)

   if senderIsTableviewCell
   {
       //do something
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X