Ios 我想使用Xcode上的Swift使我的暗模式在所有视图控制器上同时工作。我该怎么做?

Ios 我想使用Xcode上的Swift使我的暗模式在所有视图控制器上同时工作。我该怎么做?,ios,swift,xcode,mobile,uiviewcontroller,Ios,Swift,Xcode,Mobile,Uiviewcontroller,这是暗模式的代码。它在一个视图控制器上工作,但我想使它同时在所有视图控制器上工作。我该怎么做 @IBAction func darkModeAction(_ sender: UISwitch) { if darkModeSwitch.isOn == true { view.backgroundColor = UIColor.white } else { view.backgroundColor = UIColor.bla

这是暗模式的代码。它在一个视图控制器上工作,但我想使它同时在所有视图控制器上工作。我该怎么做

@IBAction func darkModeAction(_ sender: UISwitch) {
      if darkModeSwitch.isOn == true {
          view.backgroundColor = UIColor.white
      }
      else {
          view.backgroundColor = UIColor.black
      }
    }

您可以决定是从带有开关的特定ViewController中设置该配置,还是在所有视图控制器中设置该配置,但重要的是,您希望在整个应用程序状态中保存该状态,因此当用户决定要使用暗版时,最好将其保存在
UserDefaults

然后,在希望此选项适用于您的每个ViewController中,您可能希望定义一个应用此背景色的基本ViewController(或者从Xcode11也可以从iOS 13默认暗模式)取决于UserDefaults的值,或者您可以通过扩展UIViewController来实现这一点,您可以根据保存的UserDefaults密钥的状态应用于UIViewController的任何实例,但这并不安全

作为第一种实现方法的示例,使用BaseVC,您可以遵循以下实现,因此,在配置viewcontroller中(您可以使用切换器来决定是暗还是亮),可能存在如下情况:

@IBAction func darkModeAction(_ sender: UISwitch) {
    UserDefaults.standard.set(darkModeSwitch.isOn, forKey: "prefs_is_dark_mode_on")
}
class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let isDarkOn = UserDefaults.standard.bool(forKey: "prefs_is_dark_mode_on") as? Bool ?? true
        if #available(iOS 13.0, *) {
            overrideUserInterfaceStyle = isDarkOn ? .dark : .light // this line works only from Xcode11
        } else {
            view.backgroundColor = isDarkOn ? UIColor.black : UIColor.white
        }
    }
}
在您的BaseViewController中,可以是:

@IBAction func darkModeAction(_ sender: UISwitch) {
    UserDefaults.standard.set(darkModeSwitch.isOn, forKey: "prefs_is_dark_mode_on")
}
class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let isDarkOn = UserDefaults.standard.bool(forKey: "prefs_is_dark_mode_on") as? Bool ?? true
        if #available(iOS 13.0, *) {
            overrideUserInterfaceStyle = isDarkOn ? .dark : .light // this line works only from Xcode11
        } else {
            view.backgroundColor = isDarkOn ? UIColor.black : UIColor.white
        }
    }
}
然后在每个viewcontroller中,根据设置状态,您只需执行以下操作,即可使背景色变为黑色或白色:

class ViewControllerSample: BaseViewController {
     // do other things you want to do in this viewcontroller, the background color will be set automatically through the BaseVC
}
用于灯光模式

  overrideUserInterfaceStyle = .light

有关更多概念,请遵循中的

:“如果您提供应用程序特定的外观模式选项,您将为用户创建更多工作,因为他们必须调整多个设置。更糟糕的是,他们可能会认为您的应用程序已损坏,因为它无法响应其系统范围内的外观选择。”不要在你的应用程序中提供暗模式设置。它只用于大学作业,仅此而已。我只想添加它以显示额外的功能。