Jak ustawić właściwość komórki UITableView tak, aby nie można było jej wybierać? Nie chcę widzieć tego niebieskiego pola wyboru, gdy użytkownik dotyka komórki.
iphone
cocoa-touch
Mugunth
źródło
źródło
tableView:shouldHighlightRowAtIndexPath:
jak zauważył Ayush poniżejOdpowiedzi:
Ustaw właściwość komórki tabeli
selectionStyle
naUITableViewCellSelectionStyleNone
. Powinno to uniemożliwić jego podświetlenie. Możesz również sprawdzić tę właściwość w swoimtableView:didSelectRowAtIndexPath:
.źródło
Aby zapobiec zaznaczaniu wierszy
Aby całkowicie uniemożliwić wybór
UITableViewCell
, oddaj swojeUITableViewDelegate
narzędzietableView:willSelectRowAtIndexPath:
. Z tej metody możesz powrócić,nil
jeśli nie chcesz, aby wiersz był zaznaczony.Zapobiega to wybieraniu i
tableView:didSelectRowAtIndexPath:
wywoływaniu wiersza . Należy jednak pamiętać, że nie zapobiega to podświetleniu wiersza.Aby zapobiec podświetlaniu wierszy
Jeśli chcesz zapobiec wizualnemu podświetlaniu wiersza po dotknięciu, możesz upewnić się, że komórka
selectionStyle
jest ustawiona naUITableViewCellSelectionStyleNone
, lub najlepiej możesz mieć swojeUITableViewDelegate
narzędzietableView:shouldHighlightRowAtIndexPath:
w następujący sposób:źródło
didSelectRowAtIndexPath
ponieważ iwillSelectRowAtIndexPath
tak zawsze zostanie wezwany.Użyj tego:
źródło
didSelectRowAtIndexPath
jest nadal wywoływane.Tylko dla iOS 6+.
Możesz zaimplementować metodę
tableView:shouldHighlightRowAtIndexPath:
w swoim delegacie. Przeczytaj więcej tutaj: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.htmlźródło
Miałem też ten problem, wypróbowałem wszystko już wspomniane. Ostatnią sztuczką, która pozwoliła pozbyć się „niebieskiego błysku” przy wybieraniu komórki tabeli, było dodanie tej linii:
Nie jestem pewien, czy to była ta jedna linia, czy wszystko razem, ale w sumie wielki wynik nie ma już niebieskiego zaznaczenia ani nawet niebieskiego błysku. Szczęśliwy!
źródło
Zestaw
cell.userInteractionEnabled = NO;
źródło
używanie IB to także elegancki sposób:
źródło
Apple mówi, że pierwszą rzeczą, którą powinieneś zrobić w didSelectRowAtIndexPath, jest odznaczenie wiersza
Następnie możesz zmienić AccessoryType na znacznik wyboru lub brak, itd. Więc kiedy wpiszesz didSelectRowAtIndexPath, możesz odznaczyć wiersz, a jeśli nie ma być zaznaczony, po prostu nie zaznaczaj tego wiersza.
Przewodnik programowania w widoku tabelarycznym
źródło
Innym sposobem jest dodanie kilku metod kategorii do
UITableViewCell
. Podoba mi się to bardziej niż odpowiedź Sebastiana (również dobra), ponieważ sposób w jaki buduję swój stół. Pomyślałem, że to może być pomocne dla kogoś innego.źródło
Swift 4:
Możesz uniemożliwić zaznaczanie i podświetlanie, używając UITableViewDelegate: shouldHighlightRowAt
Ta odpowiedź zakłada, że masz utworzoną niestandardową komórkę o nazwie: CustomTableViewCell
oraz że utworzyłeś wartość logiczną wewnątrz tej niestandardowej komórki o nazwie: isSelectable
To jest wersja Swift objc odpowiedzi Sebastiana Celisa.
źródło
Jeśli zaprojektowałeś swoją komórkę w Interface Builder, możesz to zrobić, usuwając pole wyboru „ Włączono interakcję użytkownika ” dla
tableViewCell
.źródło
Jest jeszcze jeden prosty sposób na uniknięcie wyświetlania zaznaczenia na niebiesko.
Wybierz komórkę, której nie chcesz, aby była niebieska.
Następnie wybierz inspektora atrybutów (ikona tarczy obok ikony linijki w widoku właściwości z boku).
Następnie zmień pole „Wybór” z „Niebieskiego” na „Brak”.
Uwaga, prawdopodobnie nadal trwa wybieranie, po prostu nie będzie wyświetlane jako wybrane, jeśli chcesz tylko uniknąć efektu interfejsu użytkownika.
źródło
Użyj tableView: willDisplayCell: forRowAtIndexPath: zamiast tableView: didSelectRowAtIndexPath: aby pozbyć się flasha, który pojawia się po pierwszym dotknięciu komórki.
źródło
Aby wyłączyć zaznaczenie określonego wiersza, musisz wprowadzić pewne zmiany w dwóch metodach delegata UITableView.
W metodzie poniżej
po przydzieleniu komórki napisz poniższy kod
Powyższy kod zapobiegnie podświetleniu komórki, jeśli w jakiś sposób użytkownik spróbuje zaznaczyć.
w tej metodzie delegata poniżej
jeśli nie napiszesz,
if(indexPath.row == someCellNumber) return;
wiersz nadal będzie zaznaczony i istnieje ryzyko awarii aplikacjiźródło
Swift 4:
W klasie komórkowej:
źródło
Szybki 5
źródło