2016-12-04 265 views
1

我开始创建自己的项目中最喜欢的button,我需要一些帮助......保存按钮状态

我创建了一个button和已编程它来打开imagetapped就在这里:

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; 
    } 

它的工作完美,但现在如果我退出应用程序button不保存状态,如果它的selected或没有。我听说你可以NSUserDefault实现这一点,但我不知道如何实现这个,所以我很想得到一些帮助吧:)

我使用雨燕2.3和Xcode中8

谢谢。

+1

您的问题不是特定于iPhone或Xcode。请不要添加不相关的标签。您应该阅读这些标签的描述,以了解何时正确使用它们。 – rmaddy

回答

2

这是相当简单。在UserDefaults中,你可以存储布尔值而没有任何问题。

在viewDidLoad中,您可以像这样检查键值。

let defaults = UserDefaults.standard 

let buttonIsSelected = defaults.bool(forKey: "keyForIsButtonSelected") // If no value exists for this key then false is returned 

button.selected = buttonIsSelected 

在你的按钮功能里记得保存你的状态。

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 

对于Swift 2.3使用这个。

let defaults = NSUserDefaults.standardUserDefaults() 

let buttonIsSelected = defaults.boolForKey("keyForIsButtonSelected") // If no value exists for this key then false is returned 

button.selected = buttonIsSelected 

内部按钮的功能。

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 
+1

不要不必要地调用'synchronize'。 – rmaddy

+0

可以在applicationWillTerminate上调用,但如果用户在更改按钮默认值后不退出应用程序(并且没有代码同步),则不会更新(保存)。 – Adamsor

+0

我得到这个错误:'使用未解析的标识符'UserDefaults''我使用Swift 2.3 @Adamsor –

1

为SWIFT 3这将是未来:

//save value 
UserDefaults.standard.set(selected, forKey: "lButtonSelected") 
//then on next launch restore it 
let selected = UserDefaults.standard.value(forKey: "lButtonSelected") 
1

要保存NSUserDefaults值:

UserDefaults.standard.set(selected, forKey: "buttonStatus") 
UserDefaults.standard.synchronize() 

,并从NSUserDefaults检索值:

let buttonStatus = UserDefaults.standard.value(forKey: "buttonStatus") 
+1

不要不必要地调用'synchronize'。 – rmaddy

+0

@rmaddy真的,他可以在应用程序进入后台时调用同步 –

+0

这是任何人都应该调用“同步”的唯一时间。 – rmaddy