Je suis un débutant en développement iOS. Je veux ajouter une coche à mon UITableViewCell
lorsqu'il est sélectionné. La coche doit être supprimée lorsqu'une autre ligne est sélectionnée. Comment ferais-je ça?
ios
uitableview
Suchi
la source
la source
Dans votre méthode UITableViewDatasource:
Et lastIndexPath est un
property(strong) NSIndexPath* lastIndexPath;
la source
J'ai trouvé que le rechargement des données interrompt l'animation de désélection d'une manière moche.
Cette implémentation Swift ajoute / supprime proprement les coches et désélectionne la ligne:
où
lastSelection
est déclaré commevar lastSelection: NSIndexPath!
Aucune activité supplémentaire
cellForRowAtIndexPath
nécessaire. Ne devrait pas être difficile à reproduire dans Obj-C.la source
Pour définir une coche:
Pour sélectionner / désélectionner une cellule:
Pour désélectionner la cellule précédente, utilisez un ivar NSIndexPath * lastSelected pour suivre la dernière cellule sélectionnée:
la source
Mettre à jour Swift 4
la source
basé sur la vue de la table dataArray formée .. de même, j'ai pris un tableau vide, et chaque fois que l'utilisateur appuie sur une cellule, basé sur indexValue de from dataArray, j'ai stocké cet objet dans selectedDataArray
Quant à la question, c'est comme ... Une question a plusieurs options (réponses), mais finalement une seule ou aucune réponse sera un résultat
De même, une seule cellule devrait afficher une coche et les cellules restantes devraient être non sélectionnées ... dans certains cas, vous pouvez désélectionner votre réponse ... J'espère que c'est la meilleure réponse à cette question
la source
Utilisation de Swift 4.2 et swift 5 Code de travail de la coche pour uniquement la ligne sélectionnée dans TableView
la source
En supposant que vous soyez dans une classe qui hérite de
UITableViewController
, cela fait l'affaire dans Swift 3:la source
Je pense qu'il est plus propre de définir l'accessoire dans votre implémentation UITableViewCell personnalisée. En swift, j'ai utilisé:
la source
petite faute de frappe
Devrais lire
et aussi dans le
où précédemmentSelected est votre ivar local, etc. de cette façon si vous rechargez avec un index sélectionné, il est également désélectionné lorsque vous feuilletez les sélections possibles.
la source
Les réponses ci-dessus ne fonctionnent pas si vous avez réutilisé la cellule pour un grand nombre de données. Sur le défilement, vous pouvez voir une coche répétée. Pour éviter d'utiliser les étapes ci-dessous:
déclarer sur la variable: var indexNumber: NSInteger = -1
Ajoutez le code ci-dessous dans cellforRowAtIndexPath:
Et dans didselectAtIndexpath, ajoutez le code ci-dessous:
override func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
la source
Il vaut mieux affronter ce problème depuis une autre direction. Mettez tout le travail sur les mécanismes UIKit internes et déplacez l'implémentation vers UITableViewCell:
la source
Il suffit d'appeler la
didSelectRowAtIndexPath
méthode lorsque vous sélectionnez une ligne pour afficher CheckMark et sélectionnez la ligne de coche pour masquer CheckMark.la source
swift 4 au cas où vous en auriez besoin.
la source
Vous pouvez procéder de deux manières. l'un est sans sélections multiples et l'autre est avec plusieurs sélections.
la source
Le code mentionné en haut ne fonctionne qu'avec la sélection unique . Ce code suivant fonctionnera sûrement pour plusieurs sélections .
la source
Lorsqu'une cellule sélectionnée (avec la coche est à nouveau sélectionnée), supprimez simplement la sélection.
Prime:
Utilisez
self.tableView.indexPathForSelectedRow
pour détecter indexPath pour la cellule sélectionnéela source