[SWIFT] Changer l'image d'une cellule lorsqu'on clic dessus ?

InsouInsou Membre

Bonjour tout le monde,

Je me retrouve avec un problème tellement simple que j'ai l'impression de tourner en rond..

En gros, j'ai une tableView avec des custom cell et lorsqu'on clic sur une cellule, je veux changer l'image qui s'y trouve..

Normalement, il n'y a rien de compliqué à faire ça.. mais je sais pas pourquoi, ça ne fonctionne pas..

Voici mon code :

import UIKit
import SwiftyJSON

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableViewGroupe: UITableView!
@IBOutlet weak var heightTableView: NSLayoutConstraint!

var index = IndexPath()

var groupes : JSON = ["Groupe 1", "Groupe 2", "Groupe 3", "Groupe 4", "Groupe 5", "Groupe 6", "Groupe 7", "Groupe 8", "Groupe 9", "Groupe 10", "Groupe 11", "Groupe 12", "Groupe 13"]


override func viewDidLoad() {
    super.viewDidLoad()

    let hauteurLigne = 50
    let height = CGFloat((groupes.count*hauteurLigne))
    print(height)
    tableViewGroupe.rowHeight = CGFloat(hauteurLigne)
    heightTableView.constant = height
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let model = groupes[indexPath.row]
    print(model)

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? celluleGroupeAPrevenir
    cell?.textLabel?.text = model.stringValue

    if(cell?.isSelected == true){
        cell?.imageSwitch.image = UIImage(named: "2")
    }
    else{
        cell?.imageSwitch.image = UIImage(named: "1")
    }

    return cell!
}

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

    index = indexPath

    let model = groupes[indexPath.row]
    print(model)
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? celluleGroupeAPrevenir
    cell?.isSelected = true
    cell?.afficheCellule(Groupe: model, isSelected: (cell?.isSelected)!)
}

@IBAction func actionBouton(_ sender: Any) {

    print("clic bouton")

}
}

class celluleGroupeAPrevenir : UITableViewCell {


@IBOutlet weak var imageSwitch: UIImageView!

func afficheCellule(Groupe: JSON, isSelected : Bool){

   if(isSelected == true){
        print("true")
        imageSwitch.image = UIImage(named: "switch_on")
    }
    else{
        print("false")
        imageSwitch.image = UIImage(named: "switch_off")
    }
}

}

il y a surement un truc que j'oublie quelque part.. il faut peut-être rafraichir les cellules ? (comment ?)

Enfin bref, je tourne en rond sur un truc aussi "simple" et ça me prend la tête :D

Du coup, si vous avez une piste, je suis preneur ^^

Réponses

  • LarmeLarme Membre

    dequeueReusableCell(withIdentifier:):

    Call this method from your data source object when asked to provide a new cell for the table view.

    Donc n'appelle cette méthode que dans tableView(_:cellForRowAt:).

    Il faut faire :
    let cell = tableView.cellForRow(at: indexPath) (qui retourne nil si la cellule n'est pas visible au fait).

  • InsouInsou Membre

    J'm'en doutais que c'était simple et que je passais à côté de quelques choses >_<

    Merci Larme ^^

Connectez-vous ou Inscrivez-vous pour répondre.