Aucune des réponses ci-dessus n'aborde vraiment la question de manière correcte. La raison 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 switch ! La bonne façon de procéder est donc dans la méthode
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
où une déclaration de la forme
[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 le cas si quelqu'un désactive l'interaction de l'utilisateur par le biais de l'option
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
qui se contente de préparer la cellule et ne permet pas d'interaction avec l'UISwitch.
En outre, en utilisant la méthode
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
afin de désélectionner la cellule avec une instruction de la forme
[tableView deselectRowAtIndexPath:indexPath animated:NO];
montre toujours la ligne sélectionnée alors que l'utilisateur appuie sur la ContentView originale de la cellule.
Juste mes deux centimes. Je suis sûr que beaucoup trouveront cela utile.