2017-07-29 6 views
0

Ich habe eine Tabelle, die bei Auswahl ein Bild von einem anderen ändert. Das alles funktioniert gut, aber wenn ich eine TableCell auswähle, ändert sich das Bild, aber wenn ich scrolle, hat es auch das Bild einer anderen Zelle geändert, die ich nicht ausgewählt habe.CheckBox auf Tableview duplizieren, Swift, iOS

Unten ist mein Code.

Wenn ich detqueureusable Zelle in der did select-Funktion verwenden, dann ändert es nur das Bild überhaupt nicht, wenn ausgewählt.

+0

dies Ihre Frage- Antwort: https: //stackoverflow.com/questions/43686354/filtertableviewcontroller-reloadrows-reloading-rows-only-on-first-call. Sie müssen den Kontrollkästchenstatus tatsächlich speichern. –

+0

Hier ist meine Demo https://www.dropbox.com/s/e43zk55surlwjlk/CollectionCkeck.zip?dl=0 seine mit collectionview, aber die Logik kann Ihnen helfen –

Antwort

1

Sie können tableView.dequeueReusableCell(_) verwenden. Das Problem besteht darin, dass Sie den Status der ausgewählten Zellen nicht beibehalten haben.

Beispiel:

class viewController: UIVieWController, UITableViewDelegate, UITableViewDataSource { 

    var selectedCellList = [IndexPath]() 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "FeaturesCell") as! FeaturesCell 

     cell.featuresLabel.text = self.items[indexPath.row] 

     if let _ = selectedCellList.index(of: indexPath) { 
      // Cell selected, update check box image with tick mark 
      cell.checkImage.image = #imageLiteral(resourceName: "tick-inside-circle") 
     } else { 
      // Cell note selected, update check box image without tick mark 
      cell.checkImage.image = #imageLiteral(resourceName: "No-tick-inside-circle") 
     } 
     return cell 
    } 

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

     pickedFeatures.append(items[indexPath.row]) 

     if let index = selectedCellList.index(of: indexPath) { 
      selectedCellList.remove(at: index) 
     } else { 
      selectedCellList.append(indexPath) 
     } 
     tableView .reloadRows(at: [indexPath], with: .automatic) 
    } 

} 
+0

Vielen Dank @Subramanian. Das hat perfekt funktioniert, aber deine Erklärung war auch eine Hilfe. Manchmal kann eine kleine Erklärung dazu beitragen, andere zu besseren Programmierern zu machen. Also vielen Dank dafür. Alles Gute. –