如何使用用户默认值保存开关的开/关值?

时间:2016-12-19 06:30:52

标签: ios swift3 userdefaults

我创建了一个自定义表格视图单元格。在我的应用程序中,有两个文件。我有一个单独的自定义表视图单元格的文件。然后我有一个tableviewcontroller文件作为一个整体。

在我的自定义表格视图单元格中,有一个UISwitch。此UISwitch的初始值已关闭。在自定义表视图单元的文件中,我为交换机创建了一个函数。我还为开关创建了一个插座。

@IBOutlet var theSwitch: UISwitch!

@IBAction func mySwitch(_ sender: AnyObject) {
}

在我的表视图控制器中,我已经创建了视图确实出现的功能。我假设我需要做的是保存开关的值

@IBAction func mySwitch(_ sender: AnyObject) {
}

然后在表视图控制器中,以某种方式调用它在这个视图中确实出现了函数。

override func viewDidAppear(_ animated: Bool) {
}

我遇到的问题是如果更改了开关的值,则保存它。例如,如果用户打开应用程序并打开开关,我希望应用程序保存它,以便在重新打开应用程序时,交换机的值仍然打开。希望这可以通过使用用户默认值来完成。如果有人可以告诉我这样做的代码,那就太好了。

4 个答案:

答案 0 :(得分:5)

IBAction方法中,您可以像这样保存值

@IBAction func mySwitch(_ sender: UISwitch) {

    UserDefaults.standard.set(sender.isOn, forKey: "Switch")

}

在您的表视图中,委托方法以这种方式编写,以从用户默认值中获取值,并根据您之前的值设置切换状态

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let yourCell = tableView.dequeueReusableCellWithIdentifier("ProfileCell", forIndexPath: indexPath) as! MenuProfileTableViewCell

    yourCell.yourSwitch.setOn(UserDefaults.standard.bool(forKey: "Switch"), animated: true)
}

答案 1 :(得分:4)

你可以在swift 3中使用setBoolForkey,就像这样

UserDefaults.standard.set(true, forKey: "onoroff")

你要保存的地方,你可以检查viewdidload()中的值,根据“onoroff”的值改变开关的状态

 theSwitch.setOn(UserDefaults.standard.bool(forKey: "onoroff"), animated: false)

答案 2 :(得分:2)

您可以像这样查看价值:

Swift 2

  let userDefaults = NSUserDefaults.standardUserDefaults()
  if userDefaults.valueForKey("SwitchValue") != nil{

        let object = userDefaults.valueForKey("SwitchValue") as? NSNumber
        yourSwitch.on = (object?.boolValue)!
    }

并将值保存到userDefaults:

userDefault.setValue(NSNumber(bool: yourSwitch.value), forKey:"SwitchValue")

Swift 3

let uDefault = UserDefaults.standard

if uDefault.value(forKey: "SwitchValue") != nil{
     let object = uDefault .value(forKey: "SwitchValue") as? NSNumber
     yourSwitch.isOn = (object?.boolValue)!
}

并设定值

uDefault.set(NSNumber(bool: yourSwitch.value), forKey: "SwitchValue")

希望这会有所帮助

答案 3 :(得分:2)

正如PiyushRathi所说,你可以用NSNumber来做,但你可以通过设置Bool来做到这一点:

Swift 2.3

//  saving switch value
 NSUserDefaults.standardUserDefaults().setBool(theSwitch.on, forKey: "SwitchValue")

//  getting back the value
theSwitch.setOn(NSUserDefaults.standardUserDefaults().boolForKey("SwitchValue"), animated: true)

对于Swift 3(正如EmilioPelaez建议的那样):

//  saving switch value
UserDefaults.standard.set(theSwitch.isOn, forKey: "SwitchValue")

//  getting back the value
theSwitch.setOn(UserDefaults.standard.bool(forKey: "SwitchValue"), animated: true)

此外,如果您有许多UI组件要保存而不是切换,您还应该查看this UIViewController"状态保留指南"。