2017-07-29 1 views
0

J'ai un tableau qui, une fois sélectionné, change une image de l'un à l'autre. Tout cela fonctionne très bien mais quand je sélectionne une tableCell, elle change l'image, mais quand je la défile, elle a aussi changé l'image d'une autre cellule que je n'ai pas sélectionnée.CheckBox sur la duplication de tableview, Swift, iOS

Voici mon code. Si j'utilise la cellule detqueur utilisable dans la fonction de sélection, alors elle ne change tout simplement pas l'image quand elle est sélectionnée.

+0

cela répondra à votre question-: https: //stackoverflow.com/questions/43686354/filtertableviewcontroller-reloadrows-reloading-rows-only-on-first-call. Vous devez réellement enregistrer l'état de la case à cocher. –

+0

Voici ma démo https://www.dropbox.com/s/e43zk55surlwjlk/CollectionCkeck.zip?dl=0 son avec collectionview mais la logique peut vous aider –

Répondre

1

Vous pouvez utiliser tableView.dequeueReusableCell(_), Le problème est que vous n'avez pas conservé le statut des cellules sélectionnées.

Exemple:

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

Merci @Subramanian. Cela a fonctionné parfaitement, mais votre explication était aussi une aide. Parfois, une petite explication peut aider à faire d'autres meilleurs programmeurs. Donc merci pour ça. Bonne chance. –