Da ich diesen Beitrag kürzlich gelesen habe und er mir geholfen hat, wollte ich eine weitere Antwort veröffentlichen, um alle Antworten (für die Nachwelt) zu konsolidieren.
Es gibt also 5 verschiedene Antworten, je nachdem, welche Logik und/oder welches Ergebnis Sie wünschen:
1. um die blaue Hervorhebung zu deaktivieren, ohne die sonstige Interaktion der Zelle zu ändern:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Ich verwende dies, wenn ich eine UIButton - oder ein anderes Steuerelement (s) - in einer UITableViewCell gehostet haben und ich möchte der Benutzer in der Lage, mit den Steuerelementen, aber nicht die Zelle selbst zu interagieren.
<strong><em>NOTA </em></strong>: Wie Tony Million bereits erwähnt hat, verhindert dies NICHT <code>tableView:didSelectRowAtIndexPath:</code> . Ich umgehe dies durch einfache "if"-Anweisungen, wobei ich meist den Abschnitt prüfe und Maßnahmen für einen bestimmten Abschnitt vermeide.
Eine andere Möglichkeit, die ich mir überlegt habe, ist, das Anzapfen einer solchen Zelle zu testen:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// A case was selected, so push into the CaseDetailViewController
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
// Handle tap code here
}
}
Um dies für eine ganze Tabelle zu tun, können Sie die obige Lösung auf jede Zelle in der Tabelle anwenden, aber Sie können auch so vorgehen:
[tableView setAllowsSelection:NO];
<strong>In meinen Tests erlaubt dies immer noch Kontrollen innerhalb der <code>UITableViewCell</code> interaktiv zu sein.</strong>
Um eine Zelle "schreibgeschützt" zu machen, können Sie einfach Folgendes tun:
[cell setUserInteractionEnabled:NO];
4. eine ganze Tabelle "schreibgeschützt" zu machen
[tableView setUserInteractionEnabled:NO];
5. um on-the-fly zu bestimmen, ob eine Zelle hervorgehoben werden soll (die nach diese Antwort implizit die Auswahl einschließt), können Sie folgendes implementieren UITableViewDelegate
Protokollmethode:
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
24 Stimmen
Die ursprüngliche Frage hat einen schlechten Titel. OP will in erster Linie zu deaktivieren
selection
und natürlichhighlighting
wird damit deaktiviert. Viele hochrangige Antworten erklären, wie mandisable selection
und befasst sich nicht mit der Deaktivierunghighlighting
. Um nur die Hervorhebung zu deaktivieren, verwenden Siecell.selectionStyle = .None
oder gehen Sie zustoryboard / cell / Selection = None
0 Stimmen
Bitte aktualisieren Sie entweder den Titel oder den Beitrag. Ich bin verwirrt. Und angesichts dieser Frage habe ich keine Ahnung, was die gegebenen Antworten bewirken sollen.