Odpowiedzi:
Ustaw właściwość komórki tabeli selectionStyle
na UITableViewCellSelectionStyleNone
. Powinno to uniemożliwić jego podświetlenie. Możesz również sprawdzić tę właściwość w swoim tableView:didSelectRowAtIndexPath:
.
Aby całkowicie uniemożliwić wybór UITableViewCell
, oddaj swoje UITableViewDelegate
narzędzie tableView:willSelectRowAtIndexPath:
. Z tej metody możesz powrócić, nil
jeśli nie chcesz, aby wiersz był zaznaczony.
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
Zapobiega to wybieraniu i tableView:didSelectRowAtIndexPath:
wywoływaniu wiersza . Należy jednak pamiętać, że nie zapobiega to podświetleniu wiersza.
Jeśli chcesz zapobiec wizualnemu podświetlaniu wiersza po dotknięciu, możesz upewnić się, że komórka selectionStyle
jest ustawiona na UITableViewCellSelectionStyleNone
, lub najlepiej możesz mieć swoje UITableViewDelegate
narzędzie tableView:shouldHighlightRowAtIndexPath:
w następujący sposób:
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
ponieważ i willSelectRowAtIndexPath
tak zawsze zostanie wezwany.
Użyj tego:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
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
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:
self.myTableView.allowsSelection = NO;
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!
Zestaw cell.userInteractionEnabled = NO;
Apple mówi, że pierwszą rzeczą, którą powinieneś zrobić w didSelectRowAtIndexPath, jest odznaczenie wiersza
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
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.
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.
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
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
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
To jest wersja Swift objc odpowiedzi Sebastiana Celisa.
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.
Użyj tableView: willDisplayCell: forRowAtIndexPath: zamiast tableView: didSelectRowAtIndexPath: aby pozbyć się flasha, który pojawia się po pierwszym dotknięciu komórki.
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Aby wyłączyć zaznaczenie określonego wiersza, musisz wprowadzić pewne zmiany w dwóch metodach delegata UITableView.
W metodzie poniżej
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
po przydzieleniu komórki napisz poniższy kod
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
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
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
jeśli nie napiszesz, if(indexPath.row == someCellNumber) return;
wiersz nadal będzie zaznaczony i istnieje ryzyko awarii aplikacji
tableView:shouldHighlightRowAtIndexPath:
jak zauważył Ayush poniżej