Reputation: 463
I'm starting to create a favorite button
for my project and i need some help...
I have created a button
and already programmed it to switch image
when tapped
right here:
override func viewDidLoad() {
super.viewDidLoad()
//create a new button
let Favoritebutton: UIButton = UIButton(type: UIButtonType.Custom)
//set image for button
Favoritebutton.setImage(UIImage(named: "EmptyHeart.png"), forState: UIControlState.Normal)
Favoritebutton.setImage(UIImage(named: "FilledHeart.png"), forState: UIControlState.Selected)
//add function for button
Favoritebutton.addTarget(self, action: #selector(self.button(_:)), forControlEvents: .TouchUpInside)
//set frame
Favoritebutton.frame = CGRectMake(90, 90, 35, 35)
let barButton = UIBarButtonItem(customView: Favoritebutton)
//assign button to navigationbar
self.navigationItem.rightBarButtonItem = barButton
}
@IBAction func button(sender: UIButton) {
sender.selected = !sender.selected;
}
It works perfectly but as of right now if i quit the app the button
does NOT save the status if its selected
or not . I heard you can achieve this with NSUserDefault
but i don't know how to implement this so i would love to get some help with it :)
I am using Swift 2.3 and Xcode 8.
Thank you.
Upvotes: 1
Views: 964
Reputation: 770
It's quite easy. In UserDefaults you can store boolean value without any problem.
In viewDidLoad you check value for your key like this.
let defaults = UserDefaults.standard
let buttonIsSelected = defaults.bool(forKey: "keyForIsButtonSelected") // If no value exists for this key then false is returned
button.selected = buttonIsSelected
Inside your button function remember to save your status.
sender.selected = !sender.selected
let defaults = UserDefaults.standard
defaults.set(sender.selected, forKey: "keyForIsButtonSelected")
defaults.synchronize() // Save your defaults, can also move this part of code to applicationWillTerminate
For Swift 2.3 use this.
let defaults = NSUserDefaults.standardUserDefaults()
let buttonIsSelected = defaults.boolForKey("keyForIsButtonSelected") // If no value exists for this key then false is returned
button.selected = buttonIsSelected
Inside button function.
sender.selected = !sender.selected
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setBool(sender.selected, forKey: "keyForIsButtonSelected")
defaults.synchronize() // Save your defaults, can also move this part of code to applicationWillTerminate
Upvotes: 2
Reputation: 13783
To save the value in NSUserDefaults
:
UserDefaults.standard.set(selected, forKey: "buttonStatus")
UserDefaults.standard.synchronize()
And to retrieve the value from NSUserDefaults
:
let buttonStatus = UserDefaults.standard.value(forKey: "buttonStatus")
Upvotes: 1
Reputation: 17354
for swift 3 it will be next:
//save value
UserDefaults.standard.set(selected, forKey: "lButtonSelected")
//then on next launch restore it
let selected = UserDefaults.standard.value(forKey: "lButtonSelected")
Upvotes: 1