UITableViewCell, montrer bouton supprimer sur de balayage
Comment puis-je obtenir le bouton supprimer pour afficher lorsque le balayage sur un UITableViewCell
? L'événement n'est jamais évoquée, et le bouton supprimer n'apparaît jamais.
- Toute personne à la recherche pour obtenir une mise à jour de la réponse, faites défiler jusqu'à stackoverflow.com/a/37719543/6872794
- Voir mon Swift 4 réponse à une question similaire qui montre jusqu'à 3 différentes façons de créer doigt actions pour
UITableViewCell
s. - J'ai posé cette question il y a 8 ans...s'il vous plaît supprimer cette question, il est massivement obsolètes. Swift n'existait même pas!
Vous devez vous connecter pour publier un commentaire.
Au démarrage en
(-viewDidLoad or in storyboard)
faire:Substituer à l'appui conditionnel modification de l'affichage de la table. Ce ne doit être mis en œuvre si vous allez être de retour
NO
pour certains éléments. Par défaut, tous les éléments sont modifiables.self.tableView.allowsMultipleSelectionDuringEditing = NO;
pour la gauche-glisser le travail. Cela ressemble à un bug pour moi parce que la table n'est PAS en état d'édition. Cette option ne devrait s'appliquer "DuringEditing". Cependant, il fonctionne maintenant et je l'ai mis OUI à chaque fois que le tableau est saisissant de l'édition de l'état.Cette réponse a été mis à jour à Swift 3
Je pense toujours que c'est agréable d'avoir un très simple, autonome exemple, de sorte que rien n'est assumé, quand je suis en apprentissage d'une nouvelle tâche. Cette réponse, c'est que pour la suppression d'
UITableView
lignes. Le projet fonctionne comme ceci:Ce projet est basé sur la UITableView exemple pour Swift.
Ajouter le Code
Créer un nouveau projet et de remplacer le ViewController.swift code par le suivant.
La seule clé de la méthode dans le code ci-dessus qui permet de suppression de ligne est la dernière. Ici c'est pour mettre l'accent:
Storyboard
Ajouter un
UITableView
à la Vue du Contrôleur dans le storyboard. Utiliser la mise en page automatique de la broche, les quatre côtés de la table de la vue sur les bords de la Vue-Contrôleur. Contrôle de la faire glisser à partir de la vue de la table dans le storyboard pour le@IBOutlet var tableView: UITableView!
ligne dans le code.Fini
C'est tout. Vous devriez être en mesure d'exécuter votre application maintenant et supprimer des lignes balayez vers la gauche et en appuyant sur "Supprimer".
Variations
Changer le bouton "Supprimer" texte
Ajoutez la méthode suivante:
Bouton personnalisé actions
Ajoutez la méthode suivante.
Noter que ce n'est disponible qu'à partir de iOS 8. Voir cette réponse pour plus de détails.
Mise à jour pour iOS 11
Actions peut être placé soit avant ou après la cellule à l'aide de méthodes ajoutée à la UITableViewDelegate API iOS 11.
Lecture
UITableView
one, il s'agit d'un projet autonome et vous n'avez pas besoin de faire quelque chose qui n'est pas décrit ici. La raison que j'ai commencé paramètre dans le code, c'est qu'il nécessite moins d'explications dans mes réponses. Je dois revenir en arrière et modifier l'exemple de base pour utiliser le code, trop.editAction
arrière-plan un dégradé de couleur au lieu deeditAction.backgroundColor = .blue
?Ce code montre comment mettre en œuvre les supprimer.
Éventuellement, dans votre initialisation remplacer, ajouter la ligne ci-dessous pour afficher le bouton d'Édition de l'élément:
Remarque: je n'ai pas assez de réputation pour poster un commentaire dans la réponse de Kurbz.
La réponse de Kurbz est droit. Mais pour moi, il n'a jamais travaillé.
Après quelques recherches, j'ai réalisé que glisser à supprimer qui se passe lorsqu'il n'est PAS de l'édition l'affichage de la table..
Je n'ai jamais vu cette explicitement mentionné comme tel. Si je ne me trompe, je n'ai pas trouvé d'autre façon de le faire travailler.
Lors de la modification, la suppression et/ou de les réorganiser de contrôle apparaîtra.
J'ai eu un problème que j'ai juste réussi à le résoudre, donc je le partage car il peut aider quelqu'un.
J'ai un UITableView et ajouté les méthodes pour activer le doigt:
Je suis en train de travailler sur une mise à jour qui me permet de mettre la table dans le mode d'édition et permet la sélection multiple. Pour ce faire, j'ai ajouté le code à partir d'Apple TableMultiSelect de l'échantillon. Une fois que j'ai obtenu ce travail, j'ai trouvé que mon balayez vers la fonction de suppression a cessé de travailler.
Il s'avère que l'ajout de la ligne suivante dans le viewDidLoad a la question:
Avec cette ligne, la multiselect pourrait fonctionner, mais le doigt ne serait pas. Sans la ligne, c'était dans l'autre sens.
Le correctif:
Ajoutez la méthode suivante à votre viewController:
Ensuite dans votre méthode, qui met la table en mode d'édition (à partir d'appuyer sur un bouton par exemple), vous devez utiliser:
au lieu de:
Cela signifie que multiselect est activé uniquement lorsque la table est en mode d'édition.
Ci-dessous UITableViewDataSource vous permettra de glisser supprimer
arrYears est un NSMutableArray et puis de recharger la tableView
Swift
Dans iOS 8 et Swift 2.0, veuillez vous essayez cela,
@Kurbz la réponse est génial, mais je veux laisser cette note et espère que cette réponse peut sauver les gens d'un certain temps.
J'ai eu parfois ces lignes dans mon contrôleur, et ils ont fait le balayage fonctionnalité ne fonctionne pas.
Si vous utilisez
UITableViewCellEditingStyleInsert
ouUITableViewCellEditingStyleNone
que le style de montage, puis le balayage ne fonctionne pas. Vous ne pouvez utiliserUITableViewCellEditingStyleDelete
, qui est le style par défaut.Aussi, cela peut être réalisé en SWIFT à l'aide de la méthode comme suit
Swift 3
Tout ce que vous avez à faire est de permettre à ces deux fonctions:
Swift 4
Je sais, c'est une vieille question, mais @Kurbz réponse juste besoin de cela pour Xcode 6.3.2 et SDK 8.3
J'ai besoin d'ajouter
[tableView beginUpdates]
et[tableView endUpdates]
(merci à @bay.phillips ici)Lorsque vous supprimez une cellule de votre tableview, vous devez également supprimer votre objet tableau à l'indice de x.
Je pense que vous pouvez le supprimer à l'aide d'un geste de balayage.
La vue de la table va appeler le Délégué de:
Après le retrait de l'objet. Vous devez recharger la tableview utilisation.
Ajoutez la ligne suivante dans votre code:
après que vous avez supprimé la ligne avec succès. Et lorsque vous rechargez la vue ou de l'ajout de données à la source de données, l'objet ne sera plus là.
Pour toutes les autres est la réponse de Kurbz correcte.
Je voulais seulement vous rappeler que la fonction de délégué ne sera pas suffisant si vous voulez supprimer l'objet de la source de données tableau.
J'espère vous avoir aidé.
[tableView reloadData]
appeler[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]
.Swift 2.2 :
Swift, il suffit d'écrire ce code
Pour Objective-C, il suffit d'écrire ce code
pour swift4 code, tout d'abord activer l'édition:
puis vous ajoutez suppression de l'action de l'édition déléguée: