swift - 迅速。UserDefaults 和 UISwitch
问题描述
我试图让 UserDefaults 与 UISwitch 一起使用,但是当我强制关闭应用程序并重新打开它时,开关状态没有保存。
更新:让它工作。即使应用程序关闭,开关状态也将保持在“开”或“关”状态。
我的代码:
let defaults = UserDefaults.standard
@IBAction func switchAction(_ sender: UISwitch) {
defaults.set(true, forKey: "saveTrue")
defaults.set(false, forKey: "saveFalse")
if sender.isOn == false {
sender.setOn(defaults.bool(forKey: "saveFalse"), animated: true)
} else if sender.isOn == true {
sender.setOn(defaults.bool(forKey: "saveTrue"), animated: true)
}
}
回答:;;;
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
if let switchValue = getSwitchValue(), switchValue {
switchOutlet.setOn(true, animated: true)
} else {
switchOutlet.setOn(false, animated: true)
}
}
@IBAction func Switch(_ sender: UISwitch) {
if sender.isOn == false {
setSwitchStatus(status: false)
sender.setOn(false, animated: true)
} else if sender.isOn == true {
setSwitchStatus(status: true)
sender.setOn(true, animated: true)
}
}
func setSwitchStatus(status: Bool?) {
if status != nil {
defaults.set(status, forKey: "save1")
}
}
func getSwitchValue() -> Bool? {
return defaults.bool(forKey: "save1")
}
解决方案
我不确定这是你要找的东西,但我会这样做:
let defaults = UserDefaults.standard
@IBOutlet mySwitch: UISwitch!
//or any other function that is called 'when the app is reopened'
override func viewDidAppear() {
self.mySwitch.setOn(defaults.bool(forKey: "switchDefaultsKey"), animated: true)
}
@IBAction func switchAction(_ sender: UISwitch) {
defaults.set(sender.isOn, forKey: "switchDefaultsKey")
}
推荐阅读
- mongodb - 从 MongoDB 3.2 中的投影字段创建新日期
- angularjs - 当另一个组件发生变化时,angularjs会更新另一个组件
- ios - 无法销毁使用 Core Data 和 SQLite 创建的持久存储
- fabricjs - 保持恒定图像笔划时出现倾斜问题
- python-3.x - 为什么 pandas DataFrame.iloc 返回类别 dtype 的标量,而返回 object dtype 的系列?
- c - 结构在成员之后填充额外的字节
- spring - 当应用程序作为 jar 启动时,Spring boot 静态内部类未初始化
- javascript - 无法写入 Firestore 文档
- css - flex-wrap 不会在 chrome 上增长和溢出
- gluon - 模块系统未完全初始化的类的 GVM 和代理