[SWIFT] Changer l'image d'une cellule lorsqu'on clic dessus ?
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
Du coup, si vous avez une piste, je suis preneur ^^
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
dequeueReusableCell(withIdentifier:)
: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).J'm'en doutais que c'était simple et que je passais à côté de quelques choses >_<
Merci Larme ^^