2017-05-29 2 views
0

Ich habe einen Schalter eingerichtet, mit dem der Benutzer die Hintergrundfarbe ändern kann (dunkler Modus). Dies funktioniert nur auf dem View-Controller, mit dem der Code verknüpft ist. Wie würde ich es einstellen, wenn der Schalter in entweder dunklen oder hellen Modus aktiviert wird, würde sich jeder Ansichtscontroller in meiner Anwendung ändern, nicht nur der eine. Heres mein Code:Swift 3 - Ändern der Hintergrundfarbe aller View-Controller über den Schalter (Dunkelmodus/Nachtmodus)

import UIKit 

Klasse 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") 


} 

}

+2

Wahrscheinlich ist der einfachste Weg, sie alle von einem ableiten, die ViewDidLoad überschreibt, mit Code wie diesem. –

+0

Diese [tutorial] (https://www.raywenderlich.com/156036/uiappearance-tutorial-getting-started) könnte Ihnen helfen. –

+0

Aus Liebe zu Gott, lies bitte einen Style Guide. Ich weiß nicht einmal, wo ich anfangen soll. –

Antwort

0

Sie können eine Basisklasse wie diese erstellen (Dies ist etwas, die ich verwendet habe.)

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

-Setup alle Thema hier. Der gesamte Farbwert sollte global sein, den Sie von einem anderen ViewController ändern können.

Und jetzt Ihr alle Viewcontrollers wie dieses

class HomeViewController: BaseViewController { 

} 

Auf diese Weise HomeViewController alle Aussehen haben erklären Sie in BaseViewController gesetzt.

Jetzt müssen Sie nur diese globalen Variablen für den Farbwert ändern.

0

Für eine meiner Projekte habe ich eine Klasse, die die UI-Farbschema über alle meine Viewcontrollers gesteuert.

class UIColourScheme { 
    func set(for viewController: UIViewController) { 
     viewController.view.backgroundColor = bgColour 
     ... 
    } 
    var bgColour = UIColor.black 
    static let instance = UIColourScheme() 
} 

Ich würde dann für jeden Viewcontroller

class MyViewController : UIViewController { 
    func viewDidLoad() { 
     ... 
     UIColourScheme.instance.set(for:self) 
    } 
} 

Mein Farbschema Klasse Setup Farben für alles, was diese Funktion in viewDidLoad() aufrufen, aber es könnte vereinfacht werden, wie oben, nur die Hintergrundfarbe.

Verwandte Themen