Swift 3-通过开关(暗模式/夜间模式)更改所有视图控制器的背景颜色



我板条的开关,让用户更改背景颜色(深色模式(。这仅在代码链接的视图控制器上起作用。我将如何设置它,以便当开关激活到黑暗或光模式时,我应用程序中的每个视图控制器都会更改,而不仅仅是一个。这是我的代码:

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

相关内容

  • 没有找到相关文章

最新更新