Ни один из ответов выше не решает проблему правильно. Причина в том, что мы хотим отключить выделение ячейки, но не обязательно подпредставлений внутри ячейки.
В моем случае я представлял UIS-переключатель в середине строки и хотел отключить выбор для остальной части строки (которая пуста), но не для переключателя! Правильный способ сделать это, следовательно, в методе
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
где выписка вида
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
отключает выбор для конкретной ячейки, в то же время позволяет пользователю манипулировать переключателем и, следовательно, использовать соответствующий селектор. Это не так, если кто-то отключает взаимодействие с пользователем через
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
метод, который просто подготавливает ячейку и не позволяет взаимодействовать с UISwitch.
Более того, используя метод
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
чтобы отменить выделение ячейки с помощью оператора вида
[tableView deselectRowAtIndexPath:indexPath animated:NO];
по-прежнему показывает выбранную строку, пока пользователь нажимает на исходное представление содержимого ячейки.
Только мои два цента. Я уверен, что многие найдут это полезным.