Wenn Sie auf eine Zeile in a tippen UITableView
, wird die Zeile hervorgehoben und ausgewählt. Ist es möglich, dies zu deaktivieren, sodass das Tippen auf eine Zeile nichts bewirkt?
ios
uitableview
cocoa-touch
DavidM
quelle
quelle
selection
und wird damit natürlichhighlighting
deaktiviert. Viele Antworten mit hohen Stimmen erklären, wiedisable selection
das Deaktivieren behoben werden kann und nichthighlighting
. Um nur das Hervorheben zu deaktivieren, verwenden Siecell.selectionStyle = .None
oder gehen Sie zustoryboard / cell / Selection = None
Antworten:
Für mich hat Folgendes gut funktioniert:
Das heißt
didSelectRowAt#
einfach nicht funktionieren. Das heißt, das Berühren einer Reihe des Tisches als solches wird absolut nichts bewirken. (Und daher wird es natürlich nie eine ausgewählte Animation geben.)(Beachten Sie, dass
UIButton
diese Steuerelemente in den Zellen oder anderen Steuerelementen natürlich weiterhin funktionieren. Alle Steuerelemente, die Sie zufällig in der Tabellenzelle haben, stehen in keinem Zusammenhang mit der Fähigkeit von UITableView, "eine Zeile auszuwählen". mitdidSelectRowAt#
.)Ein weiterer zu beachtender Punkt ist: Dies funktioniert nicht, wenn sich das
UITableView
im Bearbeitungsmodus befindet. Verwenden Sie den folgenden Code, um die Zellenauswahl im Bearbeitungsmodus einzuschränken:quelle
selectionStyle
Eigenschaft für die Zelle festlegen :cell.selectionStyle = UITableViewCellSelectionStyle.None
in Swift odercell.selectionStyle = UITableViewCellSelectionStyleNone
in Objective-C.tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
,cell.selectionStyle = .None
ist dies erwünscht. Wenn Sie nicht möchten oder möchten, dass diese Delegatenfunktion aufgerufen wird (dh ein Textfeld in einer tableViewCell hat),tableView.allowsSelection = false
ist die Einstellung in Ordnung.Sie müssen lediglich den Auswahlstil für die
UITableViewCell
Instanz wie folgt festlegen :Ziel c:
oder
Swift 2:
Swift 3 und 4.x:
Stellen Sie außerdem sicher, dass Sie entweder keinen
-tableView:didSelectRowAtIndexPath:
Delegaten in Ihrer Tabellenansicht implementieren oder die Zellen, für die Sie keine Aktion ausführen möchten, explizit ausschließen, wenn Sie dies implementieren.Mehr Infos hier und hier
quelle
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 tatsächlich 5 verschiedene Antworten, abhängig von Ihrer gewünschten Logik und / oder Ihrem gewünschten Ergebnis:
1.So deaktivieren Sie die blaue Hervorhebung, ohne eine andere Interaktion der Zelle zu ändern:
Ich verwende dies, wenn ein UIButton oder ein anderes Steuerelement in einer UITableViewCell gehostet wird und ich möchte, dass der Benutzer mit den Steuerelementen interagieren kann, nicht jedoch mit der Zelle selbst.
HINWEIS : Wie Tony Million oben erwähnt hat, verhindert dies NICHT
tableView:didSelectRowAtIndexPath:
. Ich umgehe dies durch einfache "if" -Anweisungen, die meistens auf den Abschnitt testen und Aktionen für einen bestimmten Abschnitt vermeiden.Eine andere Möglichkeit, das Abhören einer solchen Zelle zu testen, ist:
2. Um dies für eine gesamte Tabelle zu tun, können Sie die obige Lösung auf jede Zelle in der Tabelle anwenden, aber Sie können auch Folgendes tun:
In meinen Tests können Steuerelemente im Inneren immer
UITableViewCell
noch interaktiv sein.3.Um eine Zelle "schreibgeschützt" zu machen, können Sie einfach Folgendes tun:
4.Um eine ganze Tabelle "schreibgeschützt" zu machen
5. Um im laufenden Betrieb zu bestimmen, ob eine Zelle hervorgehoben werden soll (was gemäß dieser Antwort implizit die Auswahl umfasst), können Sie die folgende
UITableViewDelegate
Protokollmethode implementieren :quelle
tableView:shouldHighlightRowAtIndexPath:
, was im Allgemeinen (nicht immer) mein bevorzugter Ansatz ist.Um zusammenzufassen, was meiner Meinung nach die richtigen Antworten sind, basierend auf meiner eigenen Erfahrung bei der Umsetzung:
Wenn Sie die Auswahl nur für einige der Zellen deaktivieren möchten, verwenden Sie:
Dies verhindert nicht nur die Auswahl, sondern verhindert auch, dass tableView: didSelectRowAtIndexPath: für die Zellen aufgerufen wird, für die es festgelegt wurde. (Dank geht an Tony Million für diese Antwort, danke!)
Wenn Ihre Zellen Schaltflächen enthalten, auf die geklickt werden muss, müssen Sie stattdessen:
Außerdem müssen Sie alle Klicks auf die Zelle in ignorieren
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.Wenn Sie die Auswahl für die gesamte Tabelle deaktivieren möchten, verwenden Sie:
(Dank an Paulo De Barros, danke!)
quelle
Ab iOS 6.0
UITableViewDelegate
hattableView:shouldHighlightRowAtIndexPath:
. (Lesen Sie darüber in der iOS- Dokumentation .)Mit dieser Methode können Sie bestimmte Zeilen als nicht hervorhebbar (und implizit nicht auswählbar) markieren, ohne den Auswahlstil einer Zelle ändern zu müssen, die Ereignisbehandlung der Zelle
userInteractionEnabled = NO
oder andere hier dokumentierte Techniken zu beeinträchtigen.quelle
Sie können auch die Auswahl der Zeile im Interface Builder selbst deaktivieren, indem Sie auswählen
NoSelection
selection
im Inspektorfenster aus der Option (der UITableView-Eigenschaften) auswählen (siehe Abbildung unten)quelle
FESTE LÖSUNG FÜR SWIFT 3
quelle
In Ihrem
UITableViewCell
‚s XIB in Attribut - Inspektoren SollwertSelection
anNone
.quelle
Wenn Sie möchten, dass die Auswahl nur blinkt und nicht im ausgewählten Status bleibt, können Sie anrufen
folgende
so blinkt der ausgewählte Zustand und kehrt zurück.
quelle
Falls jemand eine Antwort für Swift benötigt :
quelle
Dies ist, was ich benutze,
cellForRowAtIndexPath
um diesen Code zu schreiben:quelle
Über das
UITableViewDelegate
Protokoll können Sie die MethodewillSelectRowAtIndexPath
und verwendenreturn nil
wenn Sie nicht möchten, dass die Zeile ausgewählt wird.Auf die gleiche Weise können Sie die
willDeselectRowAtIndexPath
Methode verwenden undreturn nil
wenn Sie nicht möchten, dass die Auswahl der Zeile aufgehoben wird.quelle
1- Alles, was Sie tun müssen, ist den Auswahlstil für die
UITableViewCell
Instanz wie folgt festzulegen:Ziel c:
oder
Swift 2:
Swift 3:
2 - Nicht implementieren -
tableView:didSelectRowAtIndexPath:
in Ihrer Tabellenansichtdelegate
oder schließen Sie explizit die Zellen aus, für die Sie keine Aktion ausführen möchten, wenn Sie sie implementieren.3 - Außerdem können Sie dies auch über das Storyboard tun. Klicken Sie auf die Tabellenansichtszelle und ändern Sie im Attributinspektor unter Tabellenansichtszelle die Dropdown-Liste neben Auswahl in Keine.
4 - Sie können die Hervorhebung von Tabellenzellen mit dem folgenden Code in (iOS) Xcode 9, Swift 4.0 deaktivieren
quelle
Ziel c:
Unterhalb des Snippets wird die Hervorhebung deaktiviert, aber auch der Aufruf von deaktiviert
didSelectRowAtIndexPath
. Wenn Sie also nicht implementieren,didSelectRowAtIndexPath
verwenden Sie die folgende Methode. Dies sollte hinzugefügt werden, wenn Sie die Tabelle erstellen. Dies funktioniert jedoch auf Schaltflächen undUITextField
in der Zelle.Unterhalb des Snippets wird die Hervorhebung deaktiviert und der Aufruf von wird nicht deaktiviert
didSelectRowAtIndexPath
. Setzen Sie den Auswahlstil der Zelle auf Keine incellForRowAtIndexPath
Deaktivieren Sie unter dem Snippet alles in der Zelle. Dadurch wird die Interaktion zu deaktiviert
buttons
,textfields
:Schnell:
Nachfolgend sind die
Swift
oben genanntenObjective-C
Lösungen aufgeführt:Ersatz der ersten Lösung
Ersatz der zweiten Lösung
Ersatz der dritten Lösung
quelle
Versuchen Sie Folgendes einzugeben:
Bei Bedarf wird die Auswahl Ihrer Zeile aufgehoben.
In Swift3 ...
quelle
Ich habe auch ziemlich heftig damit gekämpft und eine Kontrolle in meinem
UITableViewCell
verbotenen Gebrauch vonuserInteractionEnabled
Eigentum gehabt . Ich habe eine statische Tabelle mit 3 Zellen für Einstellungen, 2 mit Datumsangaben, 1 mit einem Ein / Aus-Schalter. Nachdem ich in Storyboard / IB herumgespielt habe, habe ich es geschafft, die untere nicht auswählbar zu machen, aber wenn Sie darauf tippen, verschwindet die Auswahl aus einer der oberen Reihen. Hier ist ein WIP-Bild meiner Einstellungen UITableView:Wenn Sie auf die 3. Zeile tippen, passiert überhaupt nichts. Die Auswahl bleibt in der zweiten Zeile. Die Funktionalität ist praktisch eine Kopie des Bildschirms zur Auswahl der Ereigniszeit für die Kalender-App von Apple.
Der Code ist überraschend kompatibel bis hinunter zu IOS2 = /:
Dies funktioniert in Verbindung mit dem Festlegen des Auswahlstils auf "Keine", damit die Zelle bei Touchdown-Ereignissen nicht flackert
quelle
Wir können Code wie schreiben
aber wenn wir benutzerdefinierte Zelle xib über der Zeile haben, geben Sie eine Warnung zu diesem Zeitpunkt für
benutzerdefinierte Zelle xib
Wir müssen den Auswahlstil "Keine" im Interface Builder festlegen
quelle
Sie müssen diesen Code nur in cellForRowAtIndexPath einfügen
So deaktivieren Sie die Auswahleigenschaft der Zelle: (Während Sie auf die Zelle tippen).
quelle
Versuche dies
und
Sie können den Auswahlstil auch mit dem Interfacebuilder festlegen.
quelle
Ich benutze dies, was für mich funktioniert.
quelle
Dies ist zwar die beste und einfachste Lösung, um zu verhindern, dass eine Zeile während der Auswahl die Hervorhebung anzeigt
Ich möchte auch vorschlagen, dass es gelegentlich nützlich ist, kurz zu zeigen, dass die Zeile ausgewählt wurde, und sie dann auszuschalten. Dies warnt die Benutzer mit einer Bestätigung dessen, was sie auswählen wollten:
quelle
Deaktivieren Sie das Hervorheben von TableViewCell im Storyboard direkt
quelle
Deaktivieren der Hervorhebung der UItableviewcell
Und sollte dem Benutzer nicht erlauben, mit der Zelle zu interagieren.
quelle
Sie können die Hintergrundfarbe auch auf Löschen einstellen, um den gleichen Effekt zu erzielen
UITableViewCellSelectionStyleNone
, falls Sie ihn nicht verwenden möchten / könnenUITableViewCellSelectionStyleNone
.Sie würden Code wie den folgenden verwenden:
Dies kann Ihre Leistung beeinträchtigen, da Sie jeder Zelle eine zusätzliche farbige Ansicht hinzufügen .
quelle
Sie können verwenden:
in der Zelle für Zeile am Indexpfad Ihrer UITableView.
Sie können auch verwenden:
in der Tabellenansicht didselectrowatindexpath method.
quelle
cell.selectionStyle = UITableViewCellSelectionStyle.none
in Swift 3.Sie können dies verwenden
quelle
Sie können verwenden ....
quelle
quelle
Viel Spaß beim Codieren !!!
quelle
Sie können dies auch über das Storyboard tun. Klicken Sie auf die Tabellenansichtszelle und ändern Sie im Attributinspektor unter Tabellenansichtszelle die Dropdown-Liste neben Auswahl in Keine.
quelle