2013-04-08 14 views
13

Also habe ich diesen Code geschrieben, um ein Häkchen neben einer Reihe zu setzen, die ich ausgewählt haben will, weil ich mehrere ausgewählten ZeilenWie können Sie die ausgewählten Zeilen von einem UITableView abrufen?

UITableViewCell *cell = [tableView cellForRowAtIndexPath:path]; 

if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} else { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 

aber wenn ich die Methode will:

NSArray *selectedIndexPaths = [self.LightsView indexPathsForSelectedRows]; 

es wird nur die letzte Zeile, auf die ich geklickt habe. Ist das Häkchen nicht ausgewählt?

+1

Nö, ausgewählt ist die Zeile, die letzte wurde angezapft und war noch nicht unmarkiert. Nichts mit Zellenzubehör zu tun. Sie müssen die "ausgewählten" Zeilen (lassen Sie uns sie überprüft, das wäre angemessener) Zeilen selbst verfolgen. –

+2

Stellen Sie außerdem sicher, dass Ihr 'tableView: cellForRowAtIndexPath:' erkennt, dass Zellen wiederverwendet werden können, und als solche den 'accessoryType' für die Zeile entsprechend zurücksetzen muss; Versuchen Sie nicht, sich auf den 'accessoryType' zu ​​verlassen, um zu wissen, ob Sie eine Zeile" überprüft "haben oder nicht. Haben Sie ein separates Modell, das Ihre Tabellenansicht unterstützt, indem Sie nachverfolgen, welche Zeilen "überprüft" wurden und ob Ihr Code das Modell sowie die Benutzeroberfläche aktualisiert, und sich auch 'tableView: cellForRowAtIndexPath:' auf dieses Modell bezieht. – Rob

Antwort

21

Für die indexPathsForSelectedRows: Methode richtig funktioniert, haben Sie die Tabellenansicht zu konfigurieren, dass mehrere Auswahl von Zellen zu ermöglichen:

tableView.allowsMultipleSelection = YES; 
Verwandte Themen