使用枚举来执行函数?

时间:2017-08-14 17:21:16

标签: ios swift enums

我想在视图控制器中调用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

        }

    }

}

非常感谢所有帮助。

1 个答案:

答案 0 :(得分: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()
}

每当状态栏行为发生变化时,请将statusBarBehavior值设置为.regular.stayLight.stayDark,然后再调用setNeedsStatusBarAppearance()更新。

此外,如果您还没有这样做,则需要将View controller-based status bar appearance文件中的Info.plist密钥设置为YES