2015-10-19 2 views
1

J'ai une fonction qui change accessoryType de cellules dans Section 0 à une coche. Il fonctionne très bien et affiche une coche lorsqu'il est sélectionné, mais si une cellule dans Section 1 ou Section 2 est sélectionnée, il déplace les coches sur Section 0. Si quelqu'un pouvait me dire comment résoudre ça, ce serait génial.Swift: Les cellules UITableView sont affectées par des cellules d'une autre section

//Adds Checkmark to Cells when Selected 
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let section = 0 
     let numberOfRows = tableView.numberOfRowsInSection(section) 
     for row in 0..<numberOfRows { 
      if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: row, inSection: section)) { 
       cell.accessoryType = row == indexPath.row ? .Checkmark : .None 
      } 
     } 
    } 
+0

Avez-vous activé la sélection multiple? Je suppose que vous ne pouvez sélectionner qu'une ligne à la fois et c'est pourquoi vous perdez les coches lorsque vous sélectionnez autre chose – Moriya

+0

Aussi, pourquoi ne pas ajouter le type d'attribut lorsque vous déposez la cellule à cellForRowatIndexPath? – Moriya

+0

Oui, j'ai trois sections. Si j'appuie sur la première cellule de ma deuxième section, la première cellule de la première section sera cochée. La même chose vaut pour les deuxième et troisième cellules de chaque section. Je veux seulement que la première section utilise ce code. –

Répondre

2

Depuis votre cellule sont la réutilisation, si vous ne définissez pas les paramètres de retour de votre cellulaire lorsque vous les créez, cela se produira.

Vous devez définir accessoryType de votre cellule en cellForRowAtIndexPath.

+0

Pourriez-vous écrire un exemple de code? Je ne comprends pas très bien. Ma table a été créée dans le storyboard. Aussi, je veux seulement que la première section soit affectée par le code. –

+0

votre table est créée dans le storyboard, mais vous "remplissez" les cellules dans le code. Et pour des raisons de performances, les cellules sont réutilisées. Donc, quand vous faites défiler, la nouvelle cellule que vous voyez sera l'ancienne qui a juste disparu. Vous devez donc désactiver tous les paramètres de la cellule pour éviter qu'elle ne ressemble à l'ancienne. – AncAinu