Я хочу, чтобы мой темный режим работал на всех контроллерах представления одновременно, используя Swift на Xcode. Как бы я это сделал? - PullRequest
2 голосов
/ 07 марта 2020

Это код для темного режима. Он работает на одном контроллере представления, но я хочу, чтобы он работал на всех контроллерах представления одновременно. Как бы я это сделал?

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

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Вы можете решить, хотите ли вы установить эту конфигурацию из заданного 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
}
0 голосов
/ 07 марта 2020
For ios 13 simple call in viewcontroller within viewDidLoad()   
 override func viewDidLoad(){
         super.viewDidLoad()
         // for dark mode
         overrideUserInterfaceStyle = .dark

 }

для светлого режима

  overrideUserInterfaceStyle = .light

для получения более подробной информации следуйте подробнее о темном режиме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...