Ни один из ответов выше не решает проблему правильно. Причина в том, что мы хотим отключить выделение ячейки, но не обязательно подпредставлений внутри ячейки.
В моем случае я представлял 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];
по-прежнему показывает выбранную строку, пока пользователь нажимает на исходный contentView ячейки.
Просто мои два цента. Я уверен, что многие найдут это полезным.