2015-10-28 1 views
-1

Je travaille sur la mise en place d'un bouton "ajouter aux favoris" et voici où je suis. J'ai ajouté un UIButton à ma vue de table et je veux placer une clé comme vrai quand on clique dessus et change l'image. Ensuite, si vous cliquez à nouveau, la même clé sera définie comme false et l'image sera rétablie par défaut.Création du bouton "Favoris" dans Swift - Xcode 6

Voici mon code à ce jour:

let isCouponFav = NSUserDefaults.standardUserDefaults().boolForKey("isCouponFav"); 

Le bouton est réglé sur "Touch Up Inside" pour appeler la fonction favButtonTapped()

@IBAction func favButtonTapped(sender: UIButton){ 
    if isCouponFav == true{ 
    NsUserDefaults.standardUserDefaults().setBool(false, forKey: "isCouponFav"); 
    NSUserDefaults.standardUserDefaults().synchronize(); 
    let image = UIImage(named: "Heart_icon.png") 
    sender.setImage(image, forState: UIControlState.Normal) 
    } 
    else{ 
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isCouponFav"); 
    NSUserDefaults.standardUserDefaults().synchronize(); 
    let image = UIImage(named: "heart_icon_selected.png") 
    sender.setImage(image, forState: UIControlState.Normal) 
    } 
} 

En ce moment - Le coeur va changer au "heart_icon_selected" quand on clique dessus mais ne reviendra pas à "Heart_icon" quand on cliquera dessus.

Répondre

2

C'est parce que vous n'avez pas changé la valeur de isCoupnFav Après avoir cliqué sur le bouton, donc isCouponFav est toujours vrai/faux, en fonction de la valeur initiale dans cette ligne:

let isCouponFav = NSUserDefaults.standardUserDefaults().boolForKey("isCouponFav") 

Vous pouvez modifier le code ceci: (Mise à jour à Swift 3 syntaxe)

// To make change to isCouponFav, you need to declare it as variable 
// not a constant 
var isCouponFav = UserDefaults.standard.bool(forKey: "isCouponFav") 
... 

@IBAction func favButtonTapped(sender: UIButton) { 
    if isCouponFav { 
     let image = UIImage(named: "Heart_icon.png") 
     sender.setImage(image, for: .normal) 
    } else { 
     let image = UIImage(named: "heart_icon_selected.png") 
     sender.setImage(image, for: .normal) 
    } 

    isCouponFav = !isCouponFav 
    UserDefaults.standard.set(isCouponFav, forKey: "isCouponFav") 
    UserDefaults.standard.synchronize() 
} 

Et, à Swift vous n'avez pas besoin ; à la fin de la ligne.

+0

Je reçois une erreur à la ligne: –

+0

isCouponFav =! IsCouponFav - il me dit "Impossible d'affecter à 'isCouponFav' dans 'self' –

+0

oh oui, parce que vous faites une constante.Veuillez lire ma réponse éditée. – kientux