2017-02-16 5 views
1

Ich habe eine Liste von Zuständen in UITableView. Jetzt möchte ich mehrere Zeile von UITableView auswählen und möchte diese ausgewählten Zeilenwerte in einem Array erhalten. Wie kann ich das bekommen?Wie erhält man mehrere ausgewählte Zeilenwerte aus der uitableview und speichert mehrere ausgewählte Werte im Array?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //NSMutableArray *arrData =[statearray objectAtIndex:indexPath.row]; 
    NSLog(@"arrdata>>%@",statearray); 

    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 

    cell.textLabel.text = [statearray objectAtIndex:indexPath.row]; 
    return cell; 
} 


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

    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 

} 
+0

Geben Sie den ÜbertragungstabellenView-Bearbeitungsmodus ein und speichern Sie den ausgewählten Status – Allen

Antwort

2

Sie können tableview.indexPathForSelectedRows anrufen. Dadurch wird ein Array mit den Indexpfaden für alle ausgewählten Zeilen in Ihrer Tabellenansicht ausgegeben!

Dies ist, wie Sie den Code in swift 3 aussehen würde:

var values : [String] = [] 
let selected_indexPaths = tableView.indexPathsForSelectedRows 
for indexPath in selected_indexPaths! { 
    let cell = tableView.cellForRow(at: indexPath) 
    values.append((cell?.textLabel?.text)!) 
} 

Nach dem Ausführen von Code der Werte aller ausgewählten Zellen in dem values Array sein sollten.

+0

UITableViewCell * selectedCell = [tableView cellForRowAtIndexPath: indexPath]; NSString * Zellentext = selectedCell.textLabel.text; – sp309

+0

Auf diese Weise bekomme ich ausgewählten Zeilenwert in string.but wie erhalten mehrere ausgewählte Zeilenwert in einem Array mit Komma Seperater? – sp309

+0

Sie können einfach 'tableView.indexPathForSelectedRows' verwenden, das Ihnen ein Array von Indexpfaden bietet. Dann können Sie eine for-Schleife erstellen und alle Indexpfade in diesem Array durchlaufen und die Zelle für jeden Indexpfad abrufen, wie Sie es in Ihrem Code tun, und die Ergebnisse einfach in einem Array speichern. –

0

Es ist Standardmethode von Tableview, self.tableView.indexPathsForSelectedRows

Welche Sie eine Reihe von ausgewählten indexpaths gibt. Aber Sie müssen auch Eigenschaft Tableview gesetzt

self.tableView.allowsMultipleSelection = true

0

Wenn wieder selcted Reihen verfolgen möchten,

NSArray *selectedRowsArray = [yourTableViewName indexPathsForSelectedRows]; 

Antwort aktualisiert

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

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    //the below code will allow multiple selection 
    if ([yourMutableArray containsObject:indexPath]) 
    { 
     [yourMutableArray removeObject:indexPath]; 
    } 
    else 
    { 
     [yourMutableArray addObject:indexPath]; 

    } 
    [yourTableView reloadData]; 

} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *simpleTableIdentifier = @"SimpleTableItem"; 


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 

    if ([yourMutableArray containsObject:indexPath]) 

    { 

     //Do here what you wants 

     if (contentArray.count > 0) { 

      NSDictionary *dictObje = [contentArray objectAtIndex:indexPath.row]; 
      cell.textLabel.text = [NSString stringWithFormat:@"%@",[dictObje objectForKey:@"name"]]; 

     } 

     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else 
    { 

     //Do here what you wants 
     if (contentArray.count > 0) { 

      NSDictionary *dictObje = [contentArray objectAtIndex:indexPath.row]; 
      cell.textLabel.text = [NSString stringWithFormat:@"%@",[dictObje objectForKey:@"name"]]; 

     } 

     cell.accessoryType = UITableViewCellAccessoryNone; 

    } 

return cell; 
} 
+0

Ich möchte alle Zeilenwerte als Objekte von Array ausgewählt werden. Wie kann ich bekommen? – sp309

+0

Freund, was meinst du alle Zeilenwerte genau ausgewählt? –

+0

@ sp309 Warum genau wollen Sie eine Array-Struktur für ausgewählte Zeilen. 'tableView.IndexPathForSelectedRows' ist das Array für ausgewählte Zeilen. Können Sie das Problem genauer analysieren? – ystack

2

Sie den Überblick über ausgewählte halten Zellen mit unter dem Weg

var selectedCells: [UITableViewCell] = [] 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    selectedCells.append(tableView.cellForRow(at: indexPath)!) 
} 

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    let deselectedRow = tableView.cellForRow(at: indexPath) 
    if(selectedCells.contains(deselectedRow!)){ 
     let indx = selectedCells.index(of: deselectedRow!) 
     selectedCells.remove(at: indx!) 
    } 
} 

Idee ist Array von ausgewählten Zellen zu erhalten, wenn die Zellauswahlzelle geschieht und entfernen, sobald die Abwahl aus

tableView.indexPathsForSelectedRows 

Methode ausgewählt indexpaths erhalten unter Verwendung erhalten Sie können die Daten geschehen ist, ist

Der beste Weg, in ein Array

var oldArray: [NSIndexPath] = [NSIndexPath.init(row: 0, section: 0), NSIndexPath.init(row: 1, section: 0), NSIndexPath.init(row: 2, section: 0), NSIndexPath.init(row: 3, section: 0)] 
var newArray: [Int] = oldArray.flatMap { ($0.row) } 

Wie, wenn wir haben Array in Form von oldArray, können wir nur Zeilen mit flatMap bekommen.

+0

mit tableView.indexPathsForSelectedRows Ich bekomme das Array der Abschnitte und die Zeilen Wie bekomme ich das Array von nur Zeilen? –

+0

Kombination von Abschnitten und Zeilen macht Daten eindeutig, also wenn Sie nur Zeilen möchten, dann ist es möglich, die gleiche Zeilennummer in verschiedenen Abschnitten ausgewählt, die mehrdeutig werden können. Wenn Sie Details angeben können, wie Sie Ihre Daten möchten. Ich könnte dir vielleicht helfen. –

+0

Ich möchte nur Zeilen Index ausgewählt haben, aber ich werde etwas wie diese erhalten [[0,0], [0,1], [0,4]] wie Sie sehen, ich werde Index von Zeilen erhalten, aber ich werde Index erhalten von Abschnitt Aber ich will es nicht! Ich möchte ein Array von ausgewählten Zeilen Index wie folgt erhalten [0,1,4] –

Verwandte Themen