2017-08-14 5 views
1

Ich möchte eine Funktion in ViewDidLoad() in einem Ansichtscontroller aufrufen, um das Verhalten der Statusleiste dieses Ansichtscontrollers festzulegen. Ich möchte, dass die Statusleiste 3 Verhaltenszustände hat: normal, bleib hell, bleib dunkel.Verwenden einer Enumeration zum Ausführen einer Funktion?

// view controller view did load 
override func viewDidLoad() { 
    super.viewDidLoad() 

    // status bar behavior 
    // call some function 
    setNeedsStatusBarAppearanceUpdate() 

} 

Ich habe nicht viel Erfahrung mit enums, also bitte sagen Sie mir, wie zu erreichen, was ich versuche zu erreichen. Letztendlich möchte ich nur eine Funktion in viewDidLoad() aufrufen, abhängig vom Verhalten der Statusleiste, die ich für diesen View-Controller haben möchte (normal, hell bleiben, dunkel bleiben).

enum statusBarBehavior { 

    case regular 
    case stayLight 
    case stayDark 

    func statusBar() { 

     switch self { 

     // changes status bar depending on a variable 
     case .regular: 
      if nightTime == true { 
       UIApplication.shared.statusBarStyle = .lightContent 
      } else { 
       UIApplication.shared.statusBarStyle = .default 
      } 

     // permanently keeps status bar light 
     case .stayLight: 
      UIApplication.shared.statusBarStyle = .lightContent 

     // permanently keeps status bar dark 
     case .stayDark: 
      UIApplication.shared.statusBarStyle = .default 

     } 

    } 

} 

Alle Hilfe wird sehr geschätzt.

Antwort

0

Ändern Sie die Enum Funktion statusBar() einfach die Statusleiste Stil zurück:

enum StatusBarBehavior { 
    case regular 
    case stayLight 
    case stayDark 

    func statusBar() -> UIStatusBarStyle { 
     switch self { 

     // changes status bar depending on a variable 
     case .regular: 
      if nightTime == true { 
       return .lightContent 
      } else { 
       return .default 
      } 

     // permanently keeps status bar light 
     case .stayLight: 
      return .lightContent 

     // permanently keeps status bar dark 
     case .stayDark: 
      return .default 
     } 
    } 
} 

eine Eigenschaft Erstellen Sie den Enum-Wert zu speichern, die Sie wünschen:

var statusBarBehavior = StatusBarBehavior.regular 

Aufschalten die folgende Eigenschaft in Ihrem View-Controller :

override var preferredStatusBarStyle: UIStatusBarStyle { 
    return statusBarBehavior.statusBar() 
} 

Immer wenn die Statusleiste Verhalten sh Sollte sich ändern, setzen Sie den Wert statusBarBehavior auf .regular, .stayLight oder und rufen Sie dann setNeedsStatusBarAppearance() update. Wenn Sie dies noch nicht getan haben, müssen Sie den View controller-based status bar appearance Schlüssel in Ihrer Info.plist Datei auf YES setzen.

+0

Es hat nicht für mich funktioniert. Ich hatte noch nie das Glück, eine Statusleiste mit vorrangigem StatusBarStyle zu gestalten. Stattdessen verwende ich in viewDidLoad() UIApplication.shared.statusBarStyle = .lightContent, was jedes Mal funktioniert. Lass mich versuchen, deine Lösung damit zu arbeiten. –

Verwandte Themen