我想在此代码中保存我的开关状态,我一直在使用其他解决方案,但这些都没有。
编辑:
这就是我到目前为止的方式,请查看Michael。 (这是在UITableViewController上)
override func viewDidLoad() {
super.viewDidLoad()
switchController.isOn = UserDefaults.standard.bool(forKey: "isDarkMode")
}
@IBAction func changeSwitch(_ sender: UISwitch) {
UserDefaults.standard.set(switchController.isOn, forKey: "isDarkMode");
if switchController.isOn {
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]//user global variable
self.navigationController?.navigationBar.barStyle = UIBarStyle.black //user global variable
celltext.textColor = UIColor.white
label.textColor = UIColor.white
self.cell2.backgroundColor = UIColor.black
self.tabBarController?.tabBar.barTintColor = UIColor.black
view.backgroundColor = UIColor.init(red: 0.1, green: 0.1, blue: 0.1, alpha: 1.0)
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
}
else
{
exit(0);
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black]//user global variable
self.navigationController?.navigationBar.barStyle = UIBarStyle.default //user global variable
celltext.textColor = UIColor.black
label.textColor = UIColor.black
self.cell2.backgroundColor = UIColor.white
self.tabBarController?.tabBar.barTintColor = UIColor.white
view.backgroundColor = UIColor.groupTableViewBackground
self.navigationController?.navigationBar.tintColor = UIColor.white
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
}
}
}
答案 0 :(得分:0)
您只需要将viewWillDisappear
中的值保存在ViewController中。
当视图控制器即将从屏幕上消失时,将自动调用此函数,因此通过在此处保存开关状态,可以确保在开关消失之前始终保存开关状态。
class BaseTableViewController: UITableViewController {
...
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UserDefaults.standard.set(switchController.isOn, forKey: "isDarkMode")
}
}
答案 1 :(得分:0)
而不是
let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")
if isDarkMode == true {
UserDefaults.standard.set(false, forKey: "isDarkMode")
} else { UserDefaults.standard.set(true, forKey: "isDarkMode")}
写UserDefaults.standard.set(switch.isOn, forKey: "isDarkMode")
。这应该在你的if switchController.isOn == true {}
声明之前。现在仅在状态为true
时调用此方法。这可确保保存的状态是显示给用户的状态。并在你的viewDidLoad中放入
switch.isOn = UserDefaults.standard.bool(forKey: "isDarkMode")