Обновление изменений UserDefaults в реальном времени - PullRequest
0 голосов
/ 11 сентября 2018

Когда пользователь нажимает на кнопку, он изменяет пользовательские настройки по умолчанию, чтобы изменить цвет фона, включив темный режим.Но я хочу, чтобы, когда пользователь нажимал на мою кнопку, переходы изменения цвета происходили в реальном времени, как это делает приложение Twitter, без необходимости повторного открытия приложения каждый раз.Есть ли способ, которым я могу это сделать?

Это код кнопки:

@IBAction func changeState(_ sender: UIButton) {
    let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")

    if isDarkMode == true {
        UserDefaults.standard.set(false, forKey: "isDarkMode")  // Set the state
    }else{
        UserDefaults.standard.set(true, forKey: "isDarkMode")  // Set the state
    }
}

И этот код я использую для обновления цвета пользовательского интерфейса:

 override func viewDidLoad() {
    super.viewDidLoad()

    let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")  // Retrieve the state

    if isDarkMode == false{
        self.navigationController?.navigationBar.isTranslucent = false
        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]//user global variable
        self.navigationController?.navigationBar.barStyle = UIBarStyle.default //user global variable
        self.navigationController?.navigationBar.tintColor = UIColor.white //user global variable
        UIApplication.shared.statusBarStyle = .default
        appVersionLabel.textColor = UIColor.black
        lightModeLabel.isHidden = true
        self.tabBarController?.tabBar.barTintColor = UIColor.black
        settingsView.backgroundColor = UIColor.white

        darkModeButton.setImage(UIImage(named: "darkModeDisableButton")?.withRenderingMode(.alwaysOriginal), for: .normal)

    }else{

        UIApplication.shared.statusBarStyle = .lightContent
        self.navigationController?.navigationBar.isTranslucent = false
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]//user global variable
        self.navigationController?.navigationBar.barStyle = UIBarStyle.default //user global variable
        self.navigationController?.navigationBar.tintColor = UIColor.white //user global variable
        UIApplication.shared.statusBarStyle = .lightContent
        appVersionLabel.textColor = UIColor.white
        darkModeLabel.isHidden = true
        self.tabBarController?.tabBar.barTintColor = UIColor.black
        settingsView.backgroundColor = UIColor(red: 35/255, green: 35/255, blue: 35/255, alpha: 1)


        darkModeButton.setImage(UIImage(named: "darkModeEnableButton")?.withRenderingMode(.alwaysOriginal), for: .normal)
    }

1 Ответ

0 голосов
/ 11 сентября 2018

Изолировать код темы в функции:

func changeMode(mode: Bool) {
    let bar = self.navigationController?.navigationBar
    if mode == false {
        bar?.isTranslucent = false
        bar?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]//user global variable
        bar?.barStyle = UIBarStyle.default //user global variable
        bar?.tintColor = UIColor.white //user global variable
        UIApplication.shared.statusBarStyle = .default
        appVersionLabel.textColor = UIColor.black
        lightModeLabel.isHidden = true
        self.tabBarController?.tabBar.barTintColor = UIColor.black
        settingsView.backgroundColor = UIColor.white

        darkModeButton.setImage(UIImage(named: "darkModeDisableButton")?.withRenderingMode(.alwaysOriginal), for: .normal)

    } else {

        UIApplication.shared.statusBarStyle = .lightContent
        bar?.isTranslucent = false
        bar?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]//user global variable
        bar?.barStyle = UIBarStyle.default //user global variable
        bar?.tintColor = UIColor.white //user global variable
        UIApplication.shared.statusBarStyle = .lightContent
        appVersionLabel.textColor = UIColor.white
        darkModeLabel.isHidden = true
        self.tabBarController?.tabBar.barTintColor = UIColor.black
        settingsView.backgroundColor = UIColor(red: 35/255, green: 35/255, blue: 35/255, alpha: 1)

        darkModeButton.setImage(UIImage(named: "darkModeEnableButton")?.withRenderingMode(.alwaysOriginal), for: .normal)
    }
}

Ваш viewDidLoad() будет выглядеть так:

override func viewDidLoad() {
    super.viewDidLoad()

    let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")  // Retrieve the state
    changeMode(mode: isDarkMode)
}

И ваш IBAction:

@IBAction func changeState(_ sender: UIButton) {
    let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")
    //Pointed out by rmaddy
    UserDefaults.standard.set(!isDarkMode, forKey: "isDarkMode")
    changeMode(mode: !isDarkMode)
}
...