Жодна з наведених вище відповідей насправді не вирішує проблему правильно. Причина полягає в тому, що ми хочемо вимкнути вибір клітини, але не обов'язково підпогляди всередині комірки.
У моєму випадку я представляв UISwitch в середині рядка, і я хотів відключити вибір для решти рядка (який порожній), але не для перемикача! Правильний спосіб зробити це, отже, у способі
- (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 комірки.
Всього два мої копійки. Я впевнений, що багато хто вважатиме це корисним.