将用户默认值添加到暗模式

时间:2017-12-03 18:59:02

标签: ios swift themes nsuserdefaults

这是an earlier post的延续。我想知道的是如何在整个应用程序中为黑暗模式添加用户默认值。请不要注意我在上一篇文章中提到UserDefaults的代码,我正在关注tutorial并且只是复制了他所做的事情,对用户默认值一无所知。整个黑暗模式在整个应用程序中都能很好地运行。我只需要知道如何做所有用户默认值。如果您有任何问题,请随时提出。

以下代码是自定义单元格在设置视图控制器下方的样子,用于将应用程序更改为暗模式。一切都很好,应有尽有。我只需要将用户默认值放入操作中。

import UIKit

class DarkModeTableViewCell: UITableViewCell {
    var DarkisOn = Bool()
    let userDefaults = UserDefaults.standard

    @IBOutlet var darkModeSwitchOutlet: UISwitch!

    override func awakeFromNib() {
        super.awakeFromNib()

        NotificationCenter.default.addObserver(self, selector: #selector(darkModeEnabled(_:)), name: .darkModeEnabled, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(darkModeDisabled(_:)), name: .darkModeDisabled, object: nil)
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    @IBAction func darkModeSwitched(_ sender: Any) {
        if darkModeSwitchOutlet.isOn == true {
            //enable dark mode
            DarkisOn = true

            //add a userDefault here so that the app will stay in dark mode
            NotificationCenter.default.post(name: .darkModeEnabled, object: nil)
        } else {
            //enable light mode
            DarkisOn = false

            //add a userDefault here so that the app will stay in light mode
            NotificationCenter.default.post(name: .darkModeDisabled, object: nil)
        }
    }

    @objc private func darkModeEnabled(_ notification: Notification) {
        DarkModeTableViewCellChange.instance.set(for: self)
        textLabel?.textColor = UIColor.white
    }

    @objc private func darkModeDisabled(_ notification: Notification) {
        LightModeTableViewCellChange.instance.set(for: self)
        textLabel?.textColor = UIColor.black
    }
}

编辑:我正在寻找的是如何将用户默认值添加到黑暗模式。因此,一旦打开黑暗模式,然后当您关闭应用程序时,它将继续保持等等。

1 个答案:

答案 0 :(得分:1)

您使用NSUserDefaults执行的所有操作都是存储设置并检索它们。您可以存储用户在其中使用的主题。

在更改主题时,请执行以下操作(在上一个问题中,您已经在执行此类操作):

let defaults = UserDefaults.standard

// Do something like this when using changing your theme to dark mode.
defaults.set(true, "darkModeEnabled")

// Do something like this when changing your theme to your standard one
defaults.set(false, "darkModeEnabled")

在您的可见视图控制器的viewWillAppear中,您只需检查您在UserDefaults中指定的密钥的值。

/// Check if the user is using dark mode in viewDidLoad.
override func viewWillAppear() {
    super.viewDidLoad()

    let darkModeEnabled = defaults.bool(forKey: "darkModeEnabled")

    if darkModeEnabled {
        // Apply your dark theme
    } else {
        // Apply your normal theme.
    }
}

这样你的应用程序你的视图控制器在加载时会有正确的主题,用户在加载应用程序时会看到正确的主题。

推荐阅读:UserDefaults

顺便说一下,你在YouTube上关注的教程系列对初学者来说显然不够好,因为它可以通过它提到UserDefaults甚至使用它们来证明,但显然从未告诉你如何使用它们。你应该买一本关于iOS开发的好书。