UITableView n'est pas automatiquement désélectionner la ligne sélectionnée lors de la table s'affiche de nouveau
Normalement une ligne sélectionnée dans une UITableView
obtient désactivée avec une animation lorsque l'utilisateur pop de retour à partir de la vue de détail.
Cependant, dans mon cas où j'ai un UITableView
incorporé dans un UIViewController
je dois le faire manuellement en viewWillAppear
comme suit:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//For some reason the tableview does not do it automatically
[self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow
animated:YES];
}
Pourquoi est-ce et comment le résoudre?
- iNoob, essayez de story-boards, chaque fois que vous ajoutez un UITableViewController à partir de l'explorateur d'objets, vous obtiendrez gratuitement... Cependant, beaucoup de gens semblent ne pas savoir à ce sujet. Voir aussi René réponse qui l'explique bien.
Vous devez vous connecter pour publier un commentaire.
Lorsque votre principal ViewController est de type UITableViewController, il a une propriété
clearsSelectionOnViewWillAppear
, qui est par défautYES
- donc, il va effacer la sélection automatique.Cette propriété n'est pas disponible pour un UITableView, je suppose que c'est parce qu'il n'a pas de
ViewWillAppear
méthode.Un UIViewController n'a pas besoin de cette propriété, car il n'a pas de
UITableView
à l'origine.conclusion: vous aurez à mettre en œuvre par vous-même lorsque vous n'utilisez pas un
UITableViewController
.UITableView
ne dispose pas d'unviewWillAppear
méthode est parce que c'est le contrôleur, plutôt que le point de vue de la responsabilité. DepuisUITableView
est une sous-classe UIView, il ne traite pas de ce mécanisme.[myTableView deselectRowAtIndexPath:[myTableView indexPathForSelectedRow] animated:YES];
Ne l'éviction dans
didSelectRowAtIndexPath
au lieu deviewWillAppear
:Dans swift, vous pouvez ajouter les lignes suivantes dans votre
viewWillAppear
Dans swift 2, c'est sans parenthèse:
Dans Swift 4 (et 3?) le nom de la fonction a été nettoyé:
animated
doit êtretrue
.Je ne pense pas que décochant la ligne sélectionnée est automatique... j'ai l'habitude de le faire avant de le pousser à la vue suivante
yourNextViewController
à la tableviewcontroller alors il n'y a aucune indication visuelle de ce ligne a été sélectionné. Il est mieux de le faire désélectionner dansviewWillAppear
.Rien n'est mal-en décochant la ligne mise en surbrillance est toujours "manuel". Si vous regardez Apple est un exemple de code, vous verrez la même chose.
Dans Swift 3 /4