【发布时间】:2017-08-16 13:40:19
【问题描述】:
我正在尝试在我的应用程序中实现明暗模式。在settingsViewController 我有这些代码行:
//Sets user default for colour
let lightMode = UserDefaults.standard.bool(forKey: "lightMode")
//UISegment control for user to pick colour
@IBOutlet var colourSegment: UISegmentedControl!
//Updates lightMode based on user selection
@IBAction func didChangeColours(_ sender: Any) {
if colourSegment.selectedSegmentIndex == 0 {
UserDefaults.standard.set(true, forKey: "lightMode")
} else if colourSegment.selectedSegmentIndex == 1 {
UserDefaults.standard.set(false, forKey: "lightMode")
}
}
在我的entryViewController,在我的viewDidLoad,我有:
let lightMode = UserDefaults.standard.bool(forKey: "lightMode")
if lightMode == false {
Colours.darkMode()
}
customisations()
我遇到的问题是,由于某种原因,我的应用程序只是在重新启动后才更改它的配色方案。也就是说,如果用户选择colourSegment的darkIndex,应用程序只有在我重新启动后才会更新颜色。我想知道这个问题的解决方案是什么。
【问题讨论】:
-
如您所说,您只需读取并设置 viewDidLoad 中的颜色。您需要将相同的逻辑放入
didChangeColor:函数中。 -
你能扩展一下吗?
-
当您单击分段控件时,您只需将值存储在 UserDefaults 中,但您不会在那里更新 UI。您只能在
viewDidLoad中更新它。您需要做的是将相同的逻辑(设置 ui 的颜色)放入didChangeColours:方法中。
标签: ios swift nsuserdefaults