如何保存开关状态?

时间:2017-09-24 15:57:05

标签: swift

我想在此代码中保存我的开关状态,我一直在使用其他解决方案,但这些都没有。

编辑:

这就是我到目前为止的方式,请查看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]
    }
}

}

2 个答案:

答案 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")