我板条的开关,让用户更改背景颜色(深色模式(。这仅在代码链接的视图控制器上起作用。我将如何设置它,以便当开关激活到黑暗或光模式时,我应用程序中的每个视图控制器都会更改,而不仅仅是一个。这是我的代码:
import UIKit
类darkmode:uiviewController {
@IBOutlet var DarkSwitch: UISwitch!
@IBOutlet var LightSwitch: UISwitch!
var DarkisOn = Bool()
var LightisOn = Bool()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let DarkDefault = UserDefaults.standard
DarkisOn = DarkDefault.bool(forKey: "DarkDefault")
let LightDefault = UserDefaults.standard
LightisOn = LightDefault.bool(forKey: "LightDefault")
if (DarkisOn == true) {
DarkSwitch.isOn = true
LightSwitch.isOn = false
//run dark theme
DarkTheme()
}
if (LightisOn == true) {
DarkSwitch.isOn = false
LightSwitch.isOn = true
//run light theme
LightTheme()
}
}
func DarkTheme() //dark colour
{
self.view.backgroundColor = UIColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 1.0)
}
func LightTheme() //light colour
{
self.view.backgroundColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
}
@IBAction func DarkAction(_ sender: Any)
{
DarkSwitch.isOn = true
LightSwitch.isOn = false
//run dark theme func
DarkTheme()
let DarkDefault = UserDefaults.standard
DarkDefault.set(true, forKey: "DarkDefault")
let LightDefault = UserDefaults.standard
LightDefault.set(false, forKey: "LightDefault")
}
@IBAction func LightAction(_ sender: Any)
{
DarkSwitch.isOn = false
LightSwitch.isOn = true
//run light theme func
LightTheme()
let DarkDefault = UserDefaults.standard
DarkDefault.set(false, forKey: "DarkDefault")
let LightDefault = UserDefaults.standard
LightDefault.set(true, forKey: "LightDefault")
}
}
您可以创建这样的基类(这是我使用过的东西。(
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.barTintColor = MainColor
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]//user global variable
self.navigationController?.navigationBar.barStyle = UIBarStyle.black //user global variable
self.navigationController?.navigationBar.tintColor = UIColor.white //user global variable
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
在这里设置所有主题。所有颜色值都应该是全局,您可以从另一个ViewController更改。
现在声明您的所有viewControllers
class HomeViewController: BaseViewController {
}
这样,HomeViewController将在BaseViewController中设置所有外观。
现在您要做的就是更改颜色值的全局变量。
对于我的一个项目之一,我创建了一个控制所有ViewControllers UI配色方案的类。
class UIColourScheme {
func set(for viewController: UIViewController) {
viewController.view.backgroundColor = bgColour
...
}
var bgColour = UIColor.black
static let instance = UIColourScheme()
}
然后,我将在每个ViewDidload((中调用此函数
class MyViewController : UIViewController {
func viewDidLoad() {
...
UIColourScheme.instance.set(for:self)
}
}
我的配色方案类设置了所有内容的颜色,但可以简化为上面的背景颜色。
您可以使用此
protocol colorable {
func setcolor(color: UIColor)
}
class HomeVC: colorable {
}
i修改了viewWillAppear
方法。并根据一天中的时间添加黑暗模式。
您不需要格式化收到的时间/小时,您可能想按照条件语句中的方式使用它。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
// get time of the day
let hour = Calendar.current.component(.hour, from: Date())
print(hour)
if hour >= 14 {
overrideUserInterfaceStyle = .dark
}
else {
overrideUserInterfaceStyle = .light
}
}