Ninguna de las respuestas anteriores realmente aborda el problema correctamente. La razón es que queremos deshabilitar la selección de la celda, pero no necesariamente las subvistas dentro de la celda.
En mi caso, estaba presentando un interruptor UIS en el medio de la fila y quería deshabilitar la selección para el resto de la fila (que está vacía) ¡pero no para el interruptor! La forma correcta de hacerlo es, por lo tanto, en el método
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
donde una declaración de la forma
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
deshabilita la selección para la celda específica y al mismo tiempo permite al usuario manipular el interruptor y, por lo tanto, usar el selector apropiado. Esto no es cierto si alguien deshabilita la interacción del usuario a través de
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Método que simplemente prepara la célula y no permite la interacción con el UISwitch.
Además, usando el método
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
para anular la selección de la celda con una declaración del formulario
[tableView deselectRowAtIndexPath:indexPath animated:NO];
todavía muestra la fila que se está seleccionando mientras el usuario presiona la vista de contenido original de la celda.
Solo mis dos centavos. Estoy bastante seguro de que muchos encontrarán esto útil.