2017-09-02 1 views
1

Dans ce code, j'ai un état sélectionné et un état désélectionné pour mon bouton. Lorsque le bouton a été pressé, il devient vert et lorsqu'il est pressé à nouveau, il devient rouge pour représenter un état désélectionné. Cependant, tout cela est dans un DetailViewController et quand je sélectionne une ligne particulière de ma tableView puis cliquez sur le bouton pour afficher le vert et revenir en arrière et essayer une ligne différente, le bouton est vert sur cette autre ligne qui signifie que je l'ai pressé (je n'ai pas). Je me demandais s'il y avait un moyen de montrer seulement le vert pour le detailView de la ligne que j'ai sélectionnée et rouge pour les autres?Comment puis-je obtenir l'état UIButton différent pour chaque ligne tableView?

let defaults = UserDefaults.standard 

// Outlets 
@IBOutlet weak var goingButton: UIButton! 

// Actions 
@IBAction func goingButtonTapped(_ sender: UIButton) { 

    goingButton.isSelected = !goingButton.isSelected 

    if goingButton.isSelected == true { 
     goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected) 
     defaults.set(true, forKey: "going") 
     defaults.synchronize() 
     defaults.bool(forKey: "going") 
     print("defaults: \(defaults)") 
    } else if goingButton.isSelected == false { 
     goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal) 
     defaults.set(false, forKey: "going") 
     defaults.synchronize() 
     defaults.bool(forKey: "going") 

    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal) 
    if defaults.bool(forKey: "going") 
{ 
    goingButton.isSelected = true 
    goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected) 

} 
} 

Répondre

1

Essayez ceci -

override func viewDidLoad() { 
    super.viewDidLoad() 

    goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal) 
    if defaults.bool(forKey: "going") 
    { 
     goingButton.isSelected = true 
     goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected) 

    } 
} 
+0

Salut merci! Cela fonctionne bien. Si j'ai implémenté le bouton sur un DetailViewController et que j'ai eu une tableView et sélectionné une ligne, comment est-ce que j'arrêterais tous les boutons de chaque cellule detailView de passer au vert? –

+0

Vous pouvez ajouter une étiquette sur le bouton et vérifier la méthode cellForRow –