如何使用用户默认值保存开关的开/关值?
Posted
技术标签:
【中文标题】如何使用用户默认值保存开关的开/关值?【英文标题】: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)
我遇到的问题是保存开关的值,如果它被改变。例如,如果用户打开应用程序并打开开关,我希望应用程序保存它,这样当应用程序重新打开时,开关的值仍然是打开的。希望这可以通过使用用户默认值来完成。如果有人可以向我展示执行此操作的代码,那就太好了。
【问题讨论】:
您的问题解决了吗? 【参考方案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 代码。以上是关于如何使用用户默认值保存开关的开/关值?的主要内容,如果未能解决你的问题,请参考以下文章
如何保存响应 JSON 数组并在 swift 中使用用户默认值进行检索