Comme les réponses ci-dessus le point de sortir, vous devez explicitement désélectionner la ligne. Vous avez deux options, soit vous faites cela. La première, c'est pour désélectionner la ligne immédiatement après la sélection:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Qui fonctionnent très bien, mais il existe une alternative, et c'est l'approche adoptée par UITableViewController
qui est de quitter la ligne de la sélection puis désélectionner lorsque la vue s'affiche de nouveau (après le contrôleur, vous êtes à pousser sauté hors de la pile).
Cela a le léger avantage que l'utilisateur voit un aperçu de leur sélection précédente lors de leur retour afin qu'ils puissent voir ce qu'ils avaient sélectionnées précédemment.
Pour ce faire, vous avez juste besoin de remplacer viewWillAppear
:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Comme je l'ai dit, c'est ce que le défaut de mise en œuvre de l' UITableViewController
s' viewWillAppear:
n'donc, si vous utilisez UITableViewController
et de ne pas voir ce comportement, vous devez vérifier que vous appelez l' super
mise en œuvre dans votre classe propre viewDidAppear:
.
Mise à jour (30 octobre 2013): bien, c'est une réponse! Ben le souligne à juste titre dans les commentaires, UITableViewController en fait cela dans viewWillAppear:
pas viewDidAppear:
- c'est le bon moment. En outre, vous tournez ce comportement sur et en dehors à l'aide de l' clearsSelectionOnViewWillAppear
de la propriété de UITableViewController. J'ai modifié ma réponse ci-dessus pour tenir compte de cela.