【问题标题】:How to save on/off value of a switch with User defaults?如何使用用户默认值保存开关的开/关值?
【发布时间】:2016-12-19 06:30:51
【问题描述】:

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

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

@IBOutlet var theSwitch: UISwitch!

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

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

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

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

override func viewDidAppear(_ animated: Bool) {
}

我遇到的问题是保存开关的值,如果它被改变。例如,如果用户打开应用程序并打开开关,我希望应用程序保存它,这样当应用程序重新打开时,开关的值仍然是打开的。希望这可以通过使用用户默认值来完成。如果有人可以向我展示执行此操作的代码,那就太好了。

【问题讨论】:

  • 您的问题解决了吗?

标签: ios swift3 userdefaults


【解决方案1】:

在您的 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)
}

【讨论】:

  • 不要无谓地拨打synchronize
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    正如 PiyushRathi 所说,您可以使用 NSNumber 来实现,但也可以通过设置为 Bool 来实现:

    斯威夫特 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 组件需要保存而不是 switch,你也应该看看this UIViewController 的“状态保存指南”。

    【讨论】:

    • 比使用 NSNumber 好多了,但是,这就是它在 Swift 3 中的样子:UserDefaults.standard.bool(forKey: "SwitchValue"), UserDefaults.standard.set(switch.isOn, forKey: "SwitchValue")
    • 问题标记为 Swift 3。这是 Swift 2 代码。
    【解决方案4】:

    您可以像这样检查值:

    斯威夫特 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")
    

    斯威夫特 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")
    

    希望对你有帮助

    【讨论】:

    • 不要无谓地拨打synchronize
    • 问题标记为 Swift 3。这是 Swift 2 代码。
    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多