Вы можете решить, хотите ли вы установить эту конфигурацию из заданного c ViewController с переключателем, или во всех них, но важная часть заключается в том, что вы хотите сохранить это состояние через состояние приложения, так что будет Замечательно, что когда пользователь решает, что он хочет темную версию, сохранить ее в UserDefaults
.
Тогда в каждом ViewController вы хотите, чтобы эта опция работала для вас, вы можете определить базовый ViewController , в котором вы применяете этот цвет фона (или из Xcode11, а также темный режим по умолчанию iOS 13) в зависимости от значения UserDefaults, или вы можете сделать это через расширение UIViewController , где вы применяете к любой экземпляр UIViewController с этим фоном, основанный на состоянии ключа UserDefaults, который вы сохранили - но да, это не совсем безопасно.
В качестве примера для реализации его первым способом, с BaseV C, вы может следовать приведенной ниже реализации, поэтому примерно в конфигурации viewcontroller (где у вас есть переключатель она решает, хотите ли вы темный или светлый) может существовать что-то вроде:
@IBAction func darkModeAction(_ sender: UISwitch) {
UserDefaults.standard.set(darkModeSwitch.isOn, forKey: "prefs_is_dark_mode_on")
}
И в вашем BaseViewController может быть что-то вроде:
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
}
}
}
И затем в каждом контроллере представления вы хотите чтобы сделать фоновый цвет черным или белым в зависимости от того состояния настройки, которое вы можете просто сделать:
class ViewControllerSample: BaseViewController {
// do other things you want to do in this viewcontroller, the background color will be set automatically through the BaseVC
}