Newbie Questions
Newbie Questions

Reputation: 463

Save Button Status

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

Answers (3)

Adamsor
Adamsor

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

Nikos M.
Nikos M.

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

Vladyslav Zavalykhatko
Vladyslav Zavalykhatko

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

Related Questions