1259 Stimmen

Wie kann ich die UITableView-Auswahl deaktivieren?

Wenn Sie auf eine Zeile in einer UITableView wird die Zeile hervorgehoben und ausgewählt. Ist es möglich, dies zu deaktivieren, so dass das Antippen einer Zeile nichts bewirkt?

24 Stimmen

Die ursprüngliche Frage hat einen schlechten Titel. OP will in erster Linie zu deaktivieren selection und natürlich highlighting wird damit deaktiviert. Viele hochrangige Antworten erklären, wie man disable selection und befasst sich nicht mit der Deaktivierung highlighting . Um nur die Hervorhebung zu deaktivieren, verwenden Sie cell.selectionStyle = .None oder gehen Sie zu storyboard / 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.

650voto

Bei mir hat das Folgende gut funktioniert:

tableView.allowsSelection = false

Dies bedeutet didSelectRowAt# einfach nicht funktionieren. Das heißt, dass das Berühren einer Zeile in der Tabelle als solches absolut nichts bewirkt. (Und daher wird es natürlich auch nie eine ausgewählte Animation geben).

(Beachten Sie, dass Sie, wenn Sie auf den Zellen UIButton oder andere Steuerelemente, werden diese natürlich weiterhin funktionieren. Alle Steuerelemente, die Sie zufällig auf der Tabellenzelle haben, sind völlig unabhängig von der Fähigkeit von UITableView, Ihnen zu erlauben, "eine Zeile auszuwählen" mit didSelectRowAt# .)

Ein weiterer Punkt ist zu beachten: Dies funktioniert nicht, wenn die UITableView befindet sich im Bearbeitungsmodus. Um die Zellenauswahl im Bearbeitungsmodus einzuschränken, verwenden Sie den unten stehenden Code:

tableView.allowsSelectionDuringEditing = false

6 Stimmen

Dies endlich für mich gearbeitet, habe ich versucht, cell.selectionStyle = UITableViewCellSelectionStyleNone zu verwenden; aber es funktionierte nicht. Eine Sache zu beachten: es sollte sein: tableView.allowsSelection = NO; nicht falsch.

6 Stimmen

Ich denke, das ist die beste Option. Schaltflächen auf Zellen sind damit aktiv, aber Text sind nicht aktiv.

544 Stimmen

Wie kann es sein, dass dies die akzeptierte Antwort ist und so viele positive Stimmen hat? Sie beantwortet die Frage überhaupt nicht! Sie müssen die selectionStyle Eigenschaft der Zelle: cell.selectionStyle = UITableViewCellSelectionStyle.None in Swift, oder cell.selectionStyle = UITableViewCellSelectionStyleNone in Objective-C.

365voto

mbm29414 Punkte 11420

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

3 Stimmen

Wenn Sie den Zellenentwurf aus einer Feder laden, funktioniert das Kontrollkästchen (in IB) problemlos für Nr. 3 (und auf Tabellen für Nr. 4). Für #4 vs #2, ist der Unterschied, ob oder nicht Steuerelemente innerhalb der Zelle interaktiv sein wird?

4 Stimmen

Ja. Wenn Sie die Auswahl deaktivieren möchten, aber UIButtons usw. weiterhin die Benutzerinteraktion unterstützen sollen, verwenden Sie Nr. 2. Wenn Sie eine komplett schreibgeschützte Zelle wollen, verwenden Sie #4. Natürlich verstehe ich nicht, warum man etwas anderes als UIViews oder UILabels in einer nicht-interaktiven Zelle haben sollte. Vielleicht möchte jemand die gesamte Interaktion deaktivieren, während etwas anderes geschieht.

0 Stimmen

@mbm30075 #1 die erste scheint die beste Antwort von allen 4 Optionen zu sein

52voto

vignesh kumar Punkte 2280

Sie können auch die Auswahl der Zeile im Interface Builder selbst deaktivieren, indem Sie NoSelection von der selection (der UITableView-Eigenschaften) im Inspektionsbereich wie in der folgenden Abbildung gezeigt

UITableView Inspector

2 Stimmen

Beste Lösung IMHO

1 Stimmen

Ich verwende oft diese Lösung

48voto

MANISH PATHAK Punkte 2495

FESTE LÖSUNG FÜR SWIFT 3

cell.selectionStyle = .none

38voto

Mohammad Zaid Pathan Punkte 15242

In Ihrem UITableViewCell 's XIB im Attributinspektor den Wert von Selection a None .

enter image description here

0 Stimmen

Das ist genau das, was ich brauchte. Ich wollte immer noch die didSelect... Benachrichtigung, aber ohne die sichtbare Anzeige der Auswahl. Danke!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X