2011-01-06 8 views
15

würde ich nur mehrere Zeilen in einer UITableView wählen möchten wie Apple die native Alarm App ist in (Bild alt textin mehreren Reihen auswählen UITableView

siehe Wie kann ich tun, dass ich alle?

die Antworten sah Bisher waren alt (und sagte "Kann nicht") oder beziehen sich auf die Auswahl mehrerer Zeilen in der nativen Mail-App. Diese Methode ist nicht was ich möchte, weil Sie zuerst in den "Bearbeiten" -Modus eingeben müssen Ich möchte die Zeilen sofort auswählen können

Ich hoffe, jemand kann helfen

Christian

Antwort

24

In

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

if([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
    }else{ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

bearbeiten tun:

Sie müssen auch ein Array verwenden, die die markierten Zellen abbildet und in cellForRowAtIndexPath Sie müssen überprüfen, ob die accessoryType oder nicht geprüft werden sollte.

+6

Sie sollten den geprüften Status niemals selbst in Tabellenzellen speichern - sie können für mehrere Zeilen wiederverwendet werden, wenn die Tabelle scrollt, und Sie müssen den geprüften Status irgendwie wiederherstellen ... – Vladimir

+0

Ich habe auch ein Array, das die überprüften Zellen abbildet und in Zelle für Zeile bei Indexpfad Ich überprüfe, ob der AccessoryType überprüft werden sollte oder nicht –

8

"Ausgewählte" Zeilen in Clock-Anwendung sind Zellen mit UITableViewCellAccessoryCheckmark Zubehörtyp.

Mögliche Schritte zu erreichen, das ist:

  1. Shop geprüft/Zustand nicht irgendwo für jede Zeile geprüft.
  2. In cellForRowAtIndexPath: Verfahren zur Zelle im aufgegebenen Zeile der eingestellten Zelle accessoryType Eigenschaft UITableViewCellAccessoryCheckmark
  3. In cellForRowAtIndexPath: für die Zelle in nicht Zeile gesetzt Zelle geprüft accessoryType Eigenschaft UITableViewCellAccessoryNone
  4. Wenn Zelle ausgewählt ist (geklopft) Auswahl aufzuheben, invertieren seine geprüft Status und Neuladen Zelle an diesem Index Pfad
30

Der einfachste Weg, die ich gefunden habe:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
} 

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
} 

Sie können sehen, welche Zellen durch den Aufruf ausgewählt werden:

NSArray *selectedCells = [self.tableView indexPathsForSelectedRows]; 
+0

Ihre Antwort ist fantastisch .. +1 aber ich hatte ein kleines Problem .. Wie man Wert bekommt aus dem NSArray. Wenn Sie könnten bitte Ihre Antwort bearbeiten Danke – GoCrazy

+1

Ich mag Ihre Lösung, aber es scheint, wenn ich eine Zelle auswählen, mehrere Zellen ausgewählt werden, mit einer Lücke von ungefähr Bildschirmhöhe. Ich werde jetzt ein Array verwenden, um den überprüften Status für jede Zelle zu speichern. –

11

Wiedergabe mit

tableView.allowsMultipleSelection

Das hat mich gerettet Stunden von Schwierigkeiten. Gefunden here.

+6

Ist das nicht 'allowsMultipleSelection'? –

+1

Ja, es ist erlaubtMultipleSelection, nicht erlaubtMultipleAnswersAccepted –

0

Wenn Sie Storyboards verwenden, klicken Sie einfach auf die Tabellenansicht und dann im Attribut Inspector auf der rechten Seite auf die Eigenschaft "Auswahl" auf "Mehrfachauswahl". Ich habe dies mit Xcode Version 8.2.1 überprüft.

Verwandte Themen