Aucune des réponses ci-dessus ne résout vraiment le problème correctement. La raison en est que nous voulons désactiver la sélection de la cellule mais pas nécessairement des sous-vues à l'intérieur de la cellule.
Dans mon cas, je présentais un UISwitch au milieu de la ligne et je voulais désactiver la sélection pour le reste de la ligne (qui est vide) mais pas pour le commutateur! La bonne façon de le faire est donc dans la méthode
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
où une déclaration du formulaire
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
désactive la sélection pour la cellule spécifique tout en permettant à l'utilisateur de manipuler le commutateur et donc d'utiliser le sélecteur approprié. Ce n'est pas vrai si quelqu'un désactive l'interaction de l'utilisateur via le
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
méthode qui prépare simplement la cellule et ne permet pas l'interaction avec le commutateur UIS.
De plus, en utilisant la méthode
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
afin de désélectionner la cellule avec une déclaration de la forme
[tableView deselectRowAtIndexPath:indexPath animated:NO];
affiche toujours la ligne sélectionnée pendant que l'utilisateur appuie sur la vue de contenu d'origine de la cellule.
Juste mes deux cents. Je suis sûr que beaucoup trouveront cela utile.