2017-04-14 1 views
1

J'essaie de compléter mon bouton favori en le sauvegardant même lorsque je quitte la vue \ App. il sera grand si quelqu'un pouvait me montrer comment puis-je faire cela, j'utilise Xcode 8 et le codage avec Swift 3.Sauvegarder l'état du bouton favori

Code Bouton actuel:

//create a new button 
     let Favoritebutton: UIButton = UIButton(type: UIButtonType.custom) 
     //set image for button 
     Favoritebutton.setImage(UIImage(named: "EmptyHeart.png"), for: .normal) 
     Favoritebutton.setImage(UIImage(named: "FilledHeart.png"), for: .selected) 
     //add function for button 
     Favoritebutton.addTarget(self, action: #selector(self.button), for: .touchUpInside) 
     //set frame 
     Favoritebutton.frame = CGRect(x:0,y: 0,width: 35,height: 35) 

     let barButton = UIBarButtonItem(customView: Favoritebutton) 
     //assign button to navigationbar 

     self.navigationItem.rightBarButtonItem = barButton 

     let state = UserDefaults.standard.bool(forKey: "isSaved") ?? false 

     } 


    @IBAction func button(sender: UIButton) { 

     sender.isSelected = !sender.isSelected 

     UserDefaults.standard.set(true,forKey: "isSaved") 
     UserDefaults.standard.synchronize() 



     if let Favoritebutton = sender as? UIButton { 
      if Favoritebutton.isSelected { 
       // set selected 
       Favoritebutton.isSelected = true 
       UserDefaults.standard.set(true, forKey: "MY_FAV_KEY") 
       UserDefaults.standard.synchronize() 



        // set badge to tabbar item. 
     let tabItem = self.tabBarController?.tabBar.items![3] 
     sel_val = tabItem?.badgeValue 
     if(sel_val == nil){ 
      sel_val = "0" 
     } 
     let sel_num = Int(sel_val!) 
     tabItem!.badgeValue = String(format: "%d", sel_num! + 1) as String 

     let Fav: NSMutableArray = [] 
     Fav.add(barImage) 
     Fav.add(barName) 
     Fav.add(streetName) 
     favorite.add(Fav) 




      } else { 
       // set deselected 
       Favoritebutton.isSelected = false 
       UserDefaults.standard.set(true, forKey: "MY_FAV_KEY") 
       UserDefaults.standard.synchronize() 


       let tabItem = self.tabBarController?.tabBar.items![3] 
       sel_val = tabItem?.badgeValue 
       if(sel_val == nil){ 
        sel_val = "0" 
       } 
       let sel_num = Int(sel_val!) 
       tabItem!.badgeValue = String(format: "%d", sel_num! - 1) as String 
       let Fav: NSMutableArray = [] 
       Fav.add(barImage) 
       Fav.add(barName) 
       Fav.add(streetName) 
       favorite.remove(Fav) 


      } 
     } 

Comme je l'ai dit, il sera grand si quelqu'un pouvait m'aider à sauvegarder l'état du bouton même si je quittais la vue ou l'application, je l'apprécierais vraiment, merci d'avance!

Répondre

1

L'enregistrement de la valeur dans UserDefaults est écrit dans le fichier plist. Il ne lit pas la valeur ou ne restaure pas l'état lorsque l'application reprend. Vous êtes responsable de cela. Donc, quelque part dans viewDidLoad vérifier l'état:

let state = UserDefaults.standard.bool(forKey: "isSaved") ?? false 

Ensuite, configurez votre bouton en conséquence

+0

Que voulez-vous dire exactement définir votre bouton en conséquence? pouvez-vous m'aider avec le processus? –

+0

Favoritebutton.isSelected = état. Ou quoi que ce soit d'autre qui devrait arriver quand isSaved est vrai –

+0

Je ne sais pas vraiment comment mettre en place .... Pourriez-vous écrire un extrait expliquant comment cela peut-il être fait? –