Żadna z powyższych odpowiedzi tak naprawdę nie rozwiązuje problemu poprawnie. Powodem jest to, że chcemy wyłączyć zaznaczenie komórki, ale niekoniecznie widoki podrzędne wewnątrz komórki.
W moim przypadku prezentowałem UISwitch na środku wiersza i chciałem wyłączyć zaznaczanie dla reszty wiersza (który jest pusty), ale nie dla przełącznika! Właściwy sposób na zrobienie tego jest stąd w metodzie
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
gdzie oświadczenie formularza
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
wyłącza selekcję dla określonej komórki, jednocześnie umożliwiając użytkownikowi manipulowanie przełącznikiem, a tym samym użycie odpowiedniego selektora. Nie jest to prawdą, jeśli ktoś zablokuje interakcję użytkownika za pośrednictwem
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
metoda, która jedynie przygotowuje komórkę i nie pozwala na interakcję z UISwitch.
Ponadto przy użyciu metody
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
w celu usunięcia zaznaczenia komórki za pomocą instrukcji formularza
[tableView deselectRowAtIndexPath:indexPath animated:NO];
nadal pokazuje wybrany wiersz, podczas gdy użytkownik naciska na oryginalną zawartość Wyświetl widok komórki.
Tylko moje dwa centy. Jestem pewien, że wielu uzna to za przydatne.