2017-05-31 2 views
0

Wenn ich Zeile von TableView auswählen (klicke), sollte Image hinzufügen, dass ich dieses bestimmte Element ausgewählt habe. Es funktioniert gut!UITableView-Zelle bei Doppelklick sollte zum vorherigen Zustand wechseln

Mein Problem ist: wenn Benutzer von diesem ausgewählten Element zurückgehen möchten. Wenn ich auf dieselbe Zeile klicke, sollte ich die Zelle abwählen und das Bild ausblenden.

Was ich versucht ist:

func tableView (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return tableData.count 
     } 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) as! leistungCell 

    // Configure the cell... 
    let tableData = self.tableData[indexPath.row] 

    cell.leistungLbl.text = tableData["leistung_info"] as? String 

    //space between Rows 
    cell.contentView.backgroundColor = colorLightGray 
    cell.contentView.layer.borderColor = UIColor.white.cgColor 


    //space between Rows 
    cell.contentView.layer.borderWidth = 3.0 
    cell.contentView.layer.cornerRadius = 8 

    return cell 


} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 


    let cell = tableView.cellForRow(at: indexPath) 


    cell?.imageView?.image = UIImage(named: "check.png") 

    let value = Info["leistung_info"] as! String  

} 

func tableView(_ tableView: UITableView, didDeSelectRowAt indexPath: IndexPath){ 

    let cell = tableView.cellForRow(at: indexPath) 
    cell?.imageView?.image = nil 
} 
+0

welches Problem konfrontiert? – KKRocks

+0

@KKRocks, wenn ich wieder auf die selbe Zelle klicke, die ich vorher ausgewählt hatte, wird das Bild nicht gehen. Es wird immer noch sichtbar sein. Ich möchte, dass dieses Bild sich vor dieser Zelle versteckt. –

+0

Sie müssen Zelle nach Zelle neu laden? .imageView? .image = nil. – KKRocks

Antwort

1

Vergessen und didDeSelectRowAt entfernen, nur didSelectRowAt verwenden, und ein Array Auswahl zu speichern:

var selectedIndexPaths = [IndexPath]() 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let cell = tableView.cellForRow(at: indexPath) 

    if let index = selectedIndexPaths.index(of: indexPath) { //deselect it if the row is selected 
     tableView.deselectRow(at: indexPath, animated: true) 
     cell?.imageView?.image = nil 
     selectedIndexPaths.remove(at: index) 
    } 
    else{ //select it if the row is deselected 
     cell?.imageView?.image = UIImage(named: "check.png") 
     selectedIndexPaths.append(indexPath) 
    } 
} 

Und darüber im Klaren sein, dass die Zellen zu sein WIEDERVERWENDET! Bitte machen Sie den gleichen Check in cellForRowAt Methode.

+0

Danke Es hat funktioniert! –

+0

Gut zu helfen! Die Bearbeitung des Pablo verbesserte den Auswahlstatus. Dank ihm. –

+0

@Spurti, und beachten Sie, dass die Zellen erneut verwendet werden! Bitte überprüfen Sie die cellForRowAt-Methode. –

Verwandte Themen