Qu'est-ce qui ferait en sorte qu'une cellule de vue de tableau reste en surbrillance après avoir été touchée? Je clique sur la cellule et je vois qu'elle reste en surbrillance lorsqu'une vue détaillée est poussée. Une fois la vue détaillée affichée, la cellule est toujours en surbrillance.
ios
uitableview
cocoa-touch
4e espace
la source
la source
deselectRowAtIndexPath
dans mon viewDidAppear, si sélectionnez la ligne fait apparaître une nouvelle vue.-deselectRowAtIndexPath:animated:
méthode sur sa propriété tableView à partir de-viewDidAppear
. Cependant, si vous avez une vue de table dans une sous-classe UIViewController, vous devez appeler-deselectRowAtIndexPath:animated:
de-viewDidAppear
vous-même. :)-viewWillAppear:
qui l'a cassé. Ajout d'un appel pour le[super viewWillAppear:animated]
faire fonctionner à nouveau.UITableViewController
de »clearsSelectionOnViewWillAppear
la propriété est définie surYES
( ce qui est la valeur par défaut), et vous n'avez pas empêché[super viewWillAppear]
d'être appelé.La façon la plus propre de le faire est sur viewWillAppear:
De cette façon, vous avez l'animation de fondu de la sélection lorsque vous revenez au contrôleur, comme il se doit.
Tiré de http://forums.macrumors.com/showthread.php?t=577677
Version Swift
la source
viewDidAppear
place.indexPathForSelectedRow
appel peut retourner nil donc il doit être vérifié. La documentation indique : Un chemin d'index identifiant les index de ligne et de section de la ligne sélectionnée, ou nul si le chemin d'index n'est pas valide.Avez-vous sous
-(void)viewWillAppear:(BOOL)animated
- classe ? Le UITableViewCell sélectionné ne sera pas désélectionné lorsque vous n'appelez pas[super viewWillAppear:animated];
votre méthode personnalisée.la source
Pour les utilisateurs de Swift, ajoutez ceci à votre code:
C'est la réponse de paulthenerd sauf dans Swift au lieu d'Obj-C.
la source
Solution Swift 3
la source
Si vous utilisez un UITableViewCell, commentez la ligne suivante
J'espère que cela t'aides.
la source
Mis à jour avec Swift 4
Après quelques expériences, également basées sur les réponses précédentes, j'ai la conclusion que le meilleur comportement peut être obtenu de 2 manières: (presque identique en pratique)
J'adopte personnellement la première solution, car elle est simplement plus concise. Une autre possibilité, si vous avez besoin d'une petite animation lorsque vous revenez à votre tableView, est d'utiliser
viewWillAppear
:Enfin, si vous utilisez un UITableViewController, vous pouvez également profiter de la propriété clearsSelectionOnViewWillAppear .
la source
Pour obtenir le comportement décrit par Kendall Helmstetter Gelner dans son commentaire, vous ne voulez probablement pas déselectRowAtIndexPath mais plutôt la propriété clearsSelectionOnViewWillAppear sur votre contrôleur. Peut-être que cela a été réglé sur OUI par accident?
Voir le commentaire dans le modèle Apple par défaut pour les nouvelles sous-classes UITableViewController:
la source
J'avais également ce problème pour mon application d'exploration. Après qu'un viewcontroller, que j'appellerai VC, revient après avoir poussé un autre ViewController, la cellule sélectionnée dans VC est restée en surbrillance. Dans mon application, j'avais créé VC pour gérer le deuxième niveau (sur trois niveaux) de mon exploration.
Le problème dans mon cas est que VC était un UIViewController (qui contenait une vue qui contenait une TableView). J'ai plutôt fait de VC un UITableViewController (qui contenait un TableView). La classe UITableViewController gère automatiquement la suppression de la surbrillance de la cellule du tableau après le retour d'un push. La deuxième réponse au message " Problème avec deselectRowAtIndexPath dans tableView " donne une réponse plus complète à ce problème.
Le problème ne s'est pas produit pour le viewcontroller racine car lorsque j'ai créé l'application en tant qu '"application basée sur la navigation" dans XCode, le viewcontroller racine résultant a déjà été créé pour sous-classe UITableViewController.
la source
Si aucun de ces éléments ne fonctionne pour vous, envisagez cette solution:
Utilisez une séquence de déroulement pour appeler:
Pourquoi faire ceci? Principalement si vous ne parvenez pas à exécuter le code de désélection au bon moment. J'ai eu du mal à ce que cela ne fonctionne pas sur la vueWillAppear, donc le déroulement fonctionnait beaucoup mieux.
Pas:
Écrivez la séquence de déroulement (ou collez d'en haut) dans votre 1er VC (celui avec le tableau)
Allez au 2ème VC. Contrôle-faites glisser depuis le bouton Annuler / Terminé / Etc que vous utilisez pour ignorer ce VC et faites-le glisser vers l'icône de sortie en haut.
Sélectionnez la séquence de déroulement que vous avez créée à l'étape 1
Bonne chance.
la source
J'utilise CoreData donc le code qui a fonctionné pour moi était une combinaison d'idées provenant de diverses réponses, dans Swift:
la source
la source
J'ai le même problème depuis longtemps, donc au cas où quelqu'un d'autre aurait du mal:
Jetez un œil à votre
-tableView: cellForRowAtIndexPath:
et voyez si vous créez des cellules ou si vous utilisez un «identifiant de réutilisation». Dans ce dernier cas, assurez-vous que votre table dans IB contient une cellule avec cet identifiant. Si vous n'utilisez pas d'identifiant de réutilisation, créez simplement une nouvelle cellule pour chaque ligne.Cela devrait alors donner à votre table la «ligne sélectionnée de fondu» attendue à son apparition.
la source
Utilisez cette méthode dans la classe UITableViewCell
la source
Pour Swift 3: je préférerais qu'il soit utilisé dans viewDidDisappear
Définir:-
Dans viewDidDisappear: -
Dans didSelectRowAtIndexPath: -
la source
si la cellule reste en surbrillance après l'avoir touchée, vous pouvez appeler la méthode UITabelView,
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
Ou, vous pouvez utiliser la méthode suivante et la modifier selon vos besoins,
// MARQUE: UITableViewDelegate
la source
Xcode 10, Swift 4
J'ai eu ce même problème et j'ai découvert que j'avais laissé un appel vide à viewWillAppear au bas de ma tableViewController. Une fois que j'ai supprimé la fonction de remplacement vide, la ligne ne restait plus en surbrillance lors du retour à la vue tableView.
problème func
la suppression de la fonction vide a résolu mon problème.
la source
Solution Swift 5:
la source