96 votes

UITableView désactiver le balayage pour supprimer, mais toujours supprimer en mode édition?

Je veux quelque chose de similaire à l'application Alarm, dans laquelle vous ne pouvez pas supprimer la ligne par effacement, mais vous pouvez toujours supprimer la ligne en mode Edition.

Lorsque mis en commentaire, tableView: commitEditingStyle: forRowAtIndexPath :, j'ai désactivé le balayage à supprimer et j'avais toujours le bouton Supprimer en mode Édition, mais que se passe-t-il lorsque j'appuie sur le bouton Supprimer? Comment s'appelle?

290voto

willi Points 3773

Ok, cela s'avère assez facile. Voici ce que j'ai fait pour résoudre ceci:

 - (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Detemine if it's in editing mode
    if (self.tableView.editing)
    {
        return UITableViewCellEditingStyleDelete;
    }

    return UITableViewCellEditingStyleNone;
}
 

Vous devez toujours implémenter tableView:commitEditingStyle:forRowAtIndexPath: pour valider la suppression.

10voto

Marc Rochkind Points 939

Juste pour que les choses soient bien claires, le balayage-supprimer ne sera activé que si tableView:commitEditingStyle:forRowAtIndexPath: est implémenté.

Alors que j'étais en développement, je ne l'ai pas implémenté et, par conséquent, le balayage pour supprimer n'était pas activé. Bien sûr, dans une application finie, elle serait toujours mise en œuvre, car sinon, il n'y aurait pas de modification.

2voto

Massimo Cafaro Points 18759

Fondamentalement, vous activez ou désactivez le montage en utilisant les méthodes

- (void)setEditing:(BOOL)editing animated:(BOOL)animated

Si la modification est activée, le rouge de la suppression de l'icône s'affiche, et une suppression de la conformation demandé à l'utilisateur. Si l'utilisateur confirme, la méthode du délégué

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

est informé de la demande de suppression. Si vous implémentez cette méthode, puis passez à effacer automatiquement actif. Si vous n'avez pas de mettre en œuvre cette méthode, puis balayez vers la suppression n'est pas active, cependant vous n'êtes pas en mesure de supprimer la ligne. Par conséquent, au meilleur de ma connaissance, vous ne pouvez pas obtenir ce que vous avez demandé, à moins d'utiliser certains sans-papiers, l'Api privées. C'est probablement la façon dont l'application d'Apple est mis en œuvre.

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