Po dotknięciu wiersza w UITableView
wierszu jest on podświetlony i zaznaczony. Czy można to wyłączyć, więc stuknięcie wiersza nic nie robi?
ios
uitableview
cocoa-touch
DavidM
źródło
źródło
selection
i oczywiściehighlighting
zostaje z tym wyłączony. Wiele wysoko głosowanych odpowiedzi wyjaśnia, jakdisable selection
rozwiązać problem wyłączaniahighlighting
. Aby wyłączyć tylko podświetlanie, użyjcell.selectionStyle = .None
lub przejdź dostoryboard / cell / Selection = None
Odpowiedzi:
Dla mnie następujące działało dobrze:
Oznacza to, że
didSelectRowAt#
po prostu nie będzie działać. Innymi słowy, dotknięcie rzędu stołu jako takiego nie zrobi absolutnie nic. (I dlatego, oczywiście, nigdy nie będzie wybranej animacji.)(Pamiętaj, że jeśli w komórkach masz
UIButton
lub jakiekolwiek inne formanty, oczywiście te formanty nadal będą działać. Wszelkie formanty, które akurat masz w komórce tabeli, są całkowicie niezwiązane ze zdolnością UITableView do umożliwienia Ci „wyboru wiersza” za pomocądidSelectRowAt#
.)Należy również zauważyć, że: To nie działa, gdy
UITableView
jest w trybie edycji. Aby ograniczyć wybór komórek w trybie edycji, użyj kodu jak poniżej:źródło
selectionStyle
właściwość na komórce:cell.selectionStyle = UITableViewCellSelectionStyle.None
w Swift lubcell.selectionStyle = UITableViewCellSelectionStyleNone
w Objective-C.tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
zadzwonić,cell.selectionStyle = .None
jest pożądane. Jeśli nie chcesz lub nie chcesz wywoływać funkcji delegowania (tj. Mając pole tekstowe w tableViewCell) ustawienietableView.allowsSelection = false
jest w porządku.Wszystko, co musisz zrobić, to ustawić styl selekcji na
UITableViewCell
instancji za pomocą:Cel C:
lub
Swift 2:
Swift 3 i 4.x:
Ponadto upewnij się, że albo nie implementujesz
-tableView:didSelectRowAtIndexPath:
w widoku delegatu widoku tabeli, albo jawnie wykluczysz komórki, których nie chcesz wykonywać, jeśli je zaimplementujesz.Więcej informacji tutaj i tutaj
źródło
Ponieważ niedawno przeczytałem ten post i pomogło mi to, chciałem opublikować kolejną odpowiedź, aby skonsolidować wszystkie odpowiedzi (dla potomności).
Tak więc w rzeczywistości istnieje 5 różnych odpowiedzi w zależności od pożądanej logiki i / lub wyniku:
1. Aby wyłączyć niebieskie podświetlenie bez zmiany jakiejkolwiek innej interakcji komórki:
Używam tego, gdy mam UIButton - lub inne kontrolki - hostowane w UITableViewCell i chcę, aby użytkownik mógł wchodzić w interakcje z kontrolkami, ale nie z samą komórką.
UWAGA : Jak zauważył powyżej Tony Million, NIE zapobiega to
tableView:didSelectRowAtIndexPath:
. Aby obejść ten problem, używam prostych instrukcji „jeśli”, najczęściej testując sekcję i unikając działań dla określonej sekcji.Innym sposobem, w jaki pomyślałem o przetestowaniu podsłuchu takiej komórki, jest:
2. Aby to zrobić dla całej tabeli, możesz zastosować powyższe rozwiązanie do każdej komórki w tabeli, ale możesz również to zrobić:
W moich testach nadal pozwala to
UITableViewCell
na interaktywne sterowanie wewnątrz .3. Aby ustawić komórkę jako „tylko do odczytu”, możesz po prostu to zrobić:
4.Aby uczynić całą tabelę „tylko do odczytu”
5. Aby określić w locie, czy podświetlić komórkę (która zgodnie z tą odpowiedzią domyślnie obejmuje wybór), możesz zaimplementować następującą
UITableViewDelegate
metodę protokołu:źródło
tableView:shouldHighlightRowAtIndexPath:
, co jest ogólnie (nie zawsze) moim preferowanym podejściem.Podsumowując, moim zdaniem, prawidłowe odpowiedzi są oparte na moim własnym doświadczeniu we wdrażaniu tego:
Jeśli chcesz wyłączyć zaznaczanie tylko niektórych komórek, użyj:
Oprócz zapobiegania selekcji, zatrzymuje to również tableView: didSelectRowAtIndexPath: wywoływane dla komórek, które mają ustawione. (Podziękowania dla Tony'ego Milliona za tę odpowiedź, dziękuję!)
Jeśli masz w komórkach przyciski, które należy kliknąć, musisz zamiast tego:
musisz też zignorować kliknięcia komórki w
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.Jeśli chcesz wyłączyć zaznaczanie dla całej tabeli, użyj:
(Podziękowania dla Paulo De Barrosa, dzięki!)
źródło
Od iOS 6.0
UITableViewDelegate
matableView:shouldHighlightRowAtIndexPath:
. (Przeczytaj o tym w Dokumentacji iOS ).Ta metoda pozwala oznaczyć określone wiersze jako nie do podświetlenia (i domyślnie, nie można ich wybrać) bez konieczności zmiany stylu wyboru komórki, bałagania się obsługą zdarzeń komórki
userInteractionEnabled = NO
lub innymi udokumentowanymi tutaj technikami.źródło
Można również wyłączyć wybór wiersza z interfejsem budowniczy siebie wybierając
NoSelection
zselection
opcji (Właściwości UITableView) w oknie inspektora, jak pokazano na poniższym obrazieźródło
NAPRAWIONE ROZWIĄZANIE DLA SWIFT 3
źródło
W swojej
UITableViewCell
„s XIB w zestaw atrybutów Inspektor wartościSelection
doNone
.źródło
Jeśli chcesz, aby zaznaczenie tylko migało, a nie pozostało w wybranym stanie, możesz zadzwonić pod numer
następujące
więc flashuje wybrany stan i przywraca.
źródło
Jeśli ktoś potrzebuje odpowiedzi na Swift :
źródło
Tego używam,
cellForRowAtIndexPath
pisząc ten kod .:źródło
Z
UITableViewDelegate
protokołu możesz skorzystać z metody,willSelectRowAtIndexPath
areturn nil
jeśli nie chcesz, aby wiersz był zaznaczony.W ten sam sposób możesz użyć
willDeselectRowAtIndexPath
metody ireturn nil
jeśli nie chcesz, aby wiersz się odznaczył.źródło
1- Wszystko, co musisz zrobić, to ustawić styl selekcji na
UITableViewCell
instancji za pomocą:Cel C:
lub
Swift 2:
Swift 3:
2 - Nie implementuj -
tableView:didSelectRowAtIndexPath:
w widoku tabelidelegate
lub jawnie wyklucz komórki, których nie chcesz wykonywać, jeśli je wykonasz.3 - Co więcej, możesz to zrobić również z serii ujęć. Kliknij komórkę widoku tabeli iw Inspektorze atrybutów w obszarze Komórka widoku tabeli zmień menu rozwijane obok opcji Wybór na Brak.
4 - Możesz wyłączyć podświetlenie komórki tabeli za pomocą poniższego kodu w (iOS) Xcode 9, Swift 4.0
źródło
Cel C:
Poniżej fragmentu wyłącz podświetlanie, ale także wyłącz połączenie z
didSelectRowAtIndexPath
. Więc jeśli nie wdrażasz,didSelectRowAtIndexPath
użyj poniższej metody. Należy to dodać podczas tworzenia tabeli. Działa to jednak na przyciskach iUITextField
wewnątrz komórki.Poniżej fragmentu wyłącz wyróżnianie i nie wyłącza połączenia z
didSelectRowAtIndexPath
. Ustaw styl wyboru komórki na Brak wcellForRowAtIndexPath
Poniżej fragmentu wyłącz wszystko w komórce. Spowoduje to wyłączenie do interakcji
buttons
,textfields
:Szybki:
Poniżej znajdują się
Swift
odpowiedniki powyższychObjective-C
rozwiązań:Zastąpienie pierwszego rozwiązania
Zastąpienie drugiego rozwiązania
Zastąpienie trzeciego rozwiązania
źródło
Spróbuj wpisać:
W razie potrzeby usunie zaznaczenie wiersza.
W Swift3 ...
źródło
Walczyłem też z tym dość obficie, kontrolując moje
UITableViewCell
zabronione korzystanie zuserInteractionEnabled
nieruchomości. Mam 3-statyczną tabelę statyczną dla ustawień, 2 z datami, 1 z włącznikiem / wyłącznikiem. Po pobawieniu się w Storyboard / IB udało mi się sprawić, że dolnego nie da się wybrać, ale kiedy go dotkniesz, zniknie wybór z jednego z górnych wierszy. Oto obraz WIP moich ustawień UITableView:Jeśli dotkniesz trzeciego rzędu, nic się nie stanie, wybór pozostanie w drugim rzędzie. Funkcjonalność jest praktycznie kopią ekranu wyboru dodawania czasu wydarzenia w aplikacji Apple's Calendar.
Kod jest zaskakująco kompatybilny, aż do IOS2 = /:
Działa to w połączeniu z ustawieniem stylu wyboru na none, dzięki czemu komórka nie miga w przypadku zdarzeń przyziemienia
źródło
Możemy pisać jak kod
ale gdy mamy XIb zwyczaj komórek powyższej linii udzielić ostrzeżenia w tamtym czasie
niestandardowe komórki xib
musimy ustawić styl wyboru Żadne z konstruktora interfejsu
źródło
Musisz tylko wstawić ten kod do cellForRowAtIndexPath
Aby wyłączyć właściwość wyboru komórki: (Podczas stukania komórki).
źródło
Spróbuj tego
i
a także możesz ustawić styl wyboru za pomocą konstruktora interfejsów.
źródło
Korzystam z tego, co działa dla mnie.
źródło
Chociaż jest to najlepsze i najłatwiejsze rozwiązanie, aby zapobiec wyświetlaniu podświetlenia w wierszu podczas wyboru
Chciałbym również zasugerować, że czasami przydatne jest krótkie pokazanie, że wiersz został wybrany, a następnie wyłączenie go. Powiadomi to użytkowników o tym, co zamierzali wybrać:
źródło
Bezpośrednio wyłącz podświetlanie TableViewCell w serii ujęć
źródło
Aby wyłączyć podświetlenie komórki UItableviewcell
I nie powinien pozwalać użytkownikowi na interakcję z komórką.
źródło
Możesz także ustawić kolor tła na Wyczyść, aby uzyskać taki sam efekt, jak
UITableViewCellSelectionStyleNone
w przypadku, gdy nie chcesz / nie możesz użyćUITableViewCellSelectionStyleNone
.Użyłbyś kodu w następujący sposób:
Może to obniżyć wydajność, ponieważ dodasz do każdej komórki dodatkowy kolorowy widok .
źródło
Możesz użyć :
w komórce dla metody wiersza przy ścieżce indeksu w UITableView.
Możesz także użyć:
w widoku tabeli didselectrowatindexpath metoda.
źródło
cell.selectionStyle = UITableViewCellSelectionStyle.none
w Swift 3.Możesz tego użyć
źródło
Możesz użyć ....
źródło
źródło
Miłego kodowania !!!
źródło
Możesz to również zrobić z storyboardu. Kliknij komórkę widoku tabeli iw Inspektorze atrybutów w obszarze Komórka widoku tabeli zmień menu rozwijane obok opcji Wybór na Brak.
źródło