ios - 将用户默认设置添加到暗模式

标签 ios swift themes nsuserdefaults

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

下面的代码是设置 View Controller 中自定义单元格的样子,用于将应用程序更改为深色模式。一切都很好,而且应该如此。我只需要将用户默认值放入操作中。

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
    }
}

编辑:我正在寻找的是如何将用户默认设置添加到暗模式。因此,一旦打开深色模式,那么当您关闭应用程序时,它会保持打开状态,等等。

最佳答案

你对 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")

在可主题化 View Controller 的 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.
    }
}

这样一来,您的应用程序和 View Controller 将在加载时具有正确的主题,并且用户在加载应用程序时将看到正确的主题。

推荐阅读:UserDefaults

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

关于ios - 将用户默认设置添加到暗模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47622052/

相关文章:

ios - 变量 courseTitle 从未改变

iOS 键盘 : textDocumentProxy. documentContextBeforeInput.isEmpty 意外返回 Nil(当它不应该返回时)

css - 如何将 css 添加到 .scss 文件或主题中

ios - 使用选项卡 View Controller 的 Xcode IOS 转换 View

ios - 由 NSMutableArray 支持的 NSArray 修改的 KVO 通知

ios - 如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?

visual-studio-code - 带有 Jupyter 交互式窗口 : How to change the syntax colors in Python Interactive window (some text is unreadable on dark themes)? 的 VS Code

ios - 在cocos2d中用颜色填充一个圆圈

arrays - 我如何将最后一个索引数组显示到第一个索引

android - 为 popUpWindow 设置样式