2017-08-14 80 views
1

我想調用視圖控制器中的viewDidLoad()函數來設置視圖控制器狀態欄的行爲。我想要狀態欄有3個行爲狀態:常規,保持光線,保持黑暗。使用枚舉執行一個函數?

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

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

} 

我對枚舉沒有太多經驗,所以請告訴我如何完成我想要完成的任務。最終,我只想調用viewDidLoad()中的一個函數,具體取決於該視圖控制器所需的狀態欄的行爲(常規,保持亮度,保持黑暗)。

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 

     } 

    } 

} 

非常感謝所有幫助。

回答

0

更改枚舉函數statusBar()只返回狀態欄樣式:

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

創建一個屬性,你的願望枚舉值存儲:

var statusBarBehavior = StatusBarBehavior.regular 

覆蓋以下屬性在您的視圖控制器:

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

每當狀態欄行爲sh應該更改,將statusBarBehavior的值設置爲.regular,.stayLight.stayDark,然後再調用setNeedsStatusBarAppearance()更新。此外,如果您還沒有這樣做,您需要將Info.plist文件中的View controller-based status bar appearance密鑰設置爲YES

+0

它沒有爲我工作。我從來沒有運氣重寫preferredStatusBarStyle的狀態欄。相反,在viewDidLoad()我使用UIApplication.shared.statusBarStyle = .lightContent每次工作。讓我試着解決這個問題。 –