我的应用程序有12个ViewController,我希望每个状态控制器都可以从设置页面更改。 现在,我使用已放入“ CommonFuncs”类中的函数来执行此操作,然后从每个ViewController调用该函数:
CommonFuncs.setStatusBarColor()
使用此已弃用的呼叫:
UIApplication.shared.statusBarStyle = .lightContent
这使我可以通过一次调用从“设置”页面为应用程序中的所有视图设置statusBar。
现在我需要更新和删除不推荐使用的功能,但是替换似乎需要每个ViewController的代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
if activeForeColorName == "white"{
return .lightContent
}else if activeForeColorName == "black"{
return .default
}else{
return .lightContent
}
}
加上我在viewWillAppear中使用的刷新:
override func viewWillAppear(_ animated: Bool) {
setNeedsStatusBarAppearanceUpdate()
}
这是一个真正的痛苦,因为需要将相同的代码放入12个单独的ViewController中。
是否有任何方法可以将此代码移至函数中,或使用适用于整个应用程序的另一个状态栏调用?
答案 0 :(得分:0)
您可以将其移动到UIViewController扩展中,例如
extension UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
if Configs.statusBarColor == "black"{
return .default
} else {
return .lightContent
}
}
//swizzle viewWillAppear and viewWillDisappear methods and observe for statusBar color change notifications
//...
//swizzling code here...
//...
func swizzledViewWillAppear(_animated: Bool) {
self.swizzledViewDidLoad(animated)
NotificationCenter.default.addObserver(self, selector: #selector(updateStatusBarAppearance), name: NSNotification.Name("updateStatusBarColorNotification"), object: nil)
}
func swizzledViewWillDisappear(_animated: Bool) {
swizzledViewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
}
@objc func updateStatusBarAppearance() {
setNeedsStatusBarAppearanceUpdate()
}
}
然后,只要您更改updateStatusBarColorNotification
(或您的情况下为activeForeColorName),便会发布名称为Configs.statusBarColor
的通知