Frage Wie kann ich die Auswahl der UITableView-Auswahl deaktivieren?


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


1074
2017-10-10 11:32


Ursprung


Antworten:


Für mich funktionierte folgendes:

tableView.allowsSelection = NO;

Das heisst didSelectRowAt# wird einfach nicht funktionieren. Das heißt, das Berühren einer Reihe des Tisches als solcher wird absolut nichts tun. (Und daher wird es natürlich nie eine ausgewählte Animation geben.)

(Beachten Sie, dass wenn Sie auf den Zellen haben UIButton oder irgendwelche anderen Kontrollen, natürlich funktionieren diese Kontrollen noch. Alle Steuerelemente, die Sie in der Tabellenzelle haben, stehen in keinem Zusammenhang mit der Fähigkeit von UITableView, "eine Zeile auswählen" mit zu verwenden didSelectRowAt#.)


496
2017-07-22 16:56



Alles, was Sie tun müssen, ist den Auswahlstil auf der UITableViewCell Instanz mit entweder:

Ziel c:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

oder

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Schnell 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

Schnell 3:

cell.selectionStyle = .none

Stellen Sie außerdem sicher, dass Sie entweder nicht implementieren -tableView:didSelectRowAtIndexPath: In Ihrer Tabellenansicht delegieren Sie explizit die Zellen, die keine Aktion haben sollen, wenn Sie sie implementieren.

Mehr Infos hier und Hier


1829
2017-10-10 13:22



Da ich diesen Beitrag kürzlich gelesen habe und mir geholfen hat, wollte ich eine weitere Antwort veröffentlichen, um alle Antworten (für die Nachwelt) zu konsolidieren.



Also, es gibt tatsächlich 5 verschiedene Antworten, abhängig von Ihrer gewünschten Logik und / oder Ihrem Ergebnis:

1.Um die blaue Markierung zu deaktivieren, ohne irgendeine andere Interaktion der Zelle zu ändern:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Ich benutze dies, wenn ich eine UIButton - oder ein anderes Steuerelement - in einer UITableViewCell gehostet habe und ich möchte, dass der Benutzer mit den Steuerelementen interagieren kann, aber nicht mit der Zelle selbst.

HINWEIS: Wie Tony Million oben angemerkt hat, verhindert dies NICHT tableView:didSelectRowAtIndexPath:. Ich komme dazu mit einfachen "if" -Anweisungen, die meistens den Abschnitt testen und Aktionen für einen bestimmten Abschnitt vermeiden.

Eine andere Möglichkeit, wie ich das Zappeln einer Zelle testen könnte, ist:

- (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
    }
}



2. 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 dies auch tun:

[tableView setAllowsSelection:NO];

In meinen Tests erlaubt dies immer noch Kontrollen innerhalb der UITableViewCell interaktiv sein.


3. Um eine Zelle schreibgeschützt zu machen, können Sie das einfach tun:

[cell setUserInteractionEnabled:NO];



4. Um eine ganze Tabelle "schreibgeschützt" zu machen

[tableView setUserInteractionEnabled:NO];



5. Um zu bestimmen, ob eine Zelle markiert werden soll (was nach diese Antwort schließt implizit Auswahl ein), können Sie Folgendes implementieren UITableViewDelegate Protokollmethode:

- (BOOL)tableView:(UITableView *)tableView 
   shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath

333
2018-06-10 11:08



Zusammenfassend, was ich glaube, sind die richtigen Antworten basierend auf meiner eigenen Erfahrung bei der Umsetzung dieses:

Wenn Sie die Auswahl nur für einige Zellen deaktivieren möchten, verwenden Sie Folgendes:

cell.userInteractionEnabled = NO;

Das verhindert nicht nur die Auswahl, sondern stoppt auch die Tabellenansicht: didSelectRowAtIndexPath: Wird für die Zellen aufgerufen, für die sie festgelegt wurde. (Kredit geht an Tony Million für diese Antwort, danke!)

Wenn Sie in Ihren Zellen Schaltflächen haben, die angeklickt werden müssen, müssen Sie stattdessen:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

und Sie müssen auch 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:

tableView.allowsSelection = NO;

(Dank an Paulo De Barros, danke!)


75
2018-06-01 13:32



Ab iOS 6.0 UITableViewDelegate hat tableView:shouldHighlightRowAtIndexPath:. (Lesen Sie dazu im iOS Dokumentation.)

Mit dieser Methode können Sie bestimmte Zeilen als nicht hervorgehoben markieren (und implizit nicht auswählbar), ohne den Auswahlstil einer Zelle ändern zu müssen, was mit der Ereignisbehandlung der Zelle zu tun hat userInteractionEnabled = NOoder andere hier dokumentierte Techniken.


49
2017-10-31 21:48



Sie können die Auswahl der Zeile auch vom Interface Builder aus deaktivieren, indem Sie wählen NoSelection von dem selection Option (von UITableView-Eigenschaften) im Inspektorfenster, wie in der folgenden Abbildung dargestellt

UITableView Inspector


45
2018-04-25 13:13



FESTGELEGTE LÖSUNG FÜR SWIFT 3 

cell.selectionStyle = .none

42
2018-01-07 19:15



Für den Fall, dass jemand antworten muss Schnell:

cell.selectionStyle = .None

33
2017-12-02 09:39



Wenn die Auswahl nur blinken soll und nicht im ausgewählten Zustand bleiben soll, können Sie anrufen, in

didSelectRowAtIndexPath

folgende

[tableView deselectRowAtIndexPath:indexPath animated:YES];

So wird der ausgewählte Status blinken und zurück.


31
2017-11-13 15:07