75 votes

Comment activer swipe pour supprimer une cellule dans une table?

J'ai un UIViewController qui implémente les protocoles de délégué et de source de données de TableViews . Maintenant, je veux ajouter le geste "glisser pour supprimer" aux cellules.

Comment devrais-je m'y prendre?

J'ai donné une implémentation vierge de la méthode commitEditingStyle et également défini la propriété Editing sur YES.

La fonctionnalité de balayage ne vient toujours pas.

Maintenant dois-je ajouter séparément UISwipeGesture à chaque cellule?

Ou est-ce que je manque quelque chose?

61voto

Dj S Points 1946

Comme Dan l' a mentionné ci-dessus, vous devez implémenter les méthodes de délégation de vue tableau suivantes:

  1. tableView:canEditRowAtIndexPath:
  2. tableView:commitEditingStyle:forRowAtIndexPath:

Remarque: j'ai essayé ceci sous iOS 6 et iOS 7.

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return YES - we will be able to delete all rows
    return YES;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Perform the real delete action here. Note: you may need to check editing style
    //   if you do not perform delete only.
    NSLog(@"Deleted row.");
}
 

53voto

Kyr Dunenkoff Points 4333

Vous n'avez pas de fixer editing:YES si vous avez besoin de montrer bouton Supprimer sur la cellule de balayage. Vous devez implémenter tableView:canEditRowAtIndexPath: et retourner OUI partir de là, pour les lignes dont vous avez besoin pour modifier/supprimer. Ce n'est pas nécessaire lorsque votre tableView de la source de données est une sous-classe de UITableViewContoller - cette méthode, si elle n'est pas remplacée, retourne OUI par défaut. Dans tous les autres cas, vous devez la mettre en œuvre.

EDIT: Ensemble, nous avons trouvé le problème - tableView:editingStyleForRowAtIndexPath: retourné UITableViewCellEditingStyleNone si le tableau n'était pas en mode d'édition.

25voto

Can Aksoy Points 254
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}



// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}

5voto

David M. Syzdek Points 4297

Essayez d’ajouter ce qui suit à votre classe:

 // Override to support conditional editing of the table view.
- (BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return(YES);
}
 

3voto

Thiru Points 387

Conclusion du chat de Kyr Dunenkoff est

 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

}
 

ne doit pas être défini si vous avez besoin que le bouton Supprimer apparaisse lors du balayage.

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