UIViewController的扩展名不是工作更改UIStatusBarStyle在Swift中

时间:2016-02-01 09:53:48

标签: swift statusbar reusability

我尝试为 UIViewController 创建扩展,但它无效。我正在改变使用扩展的状态栏颜色但我无法获得成功。但没有扩展是有效的。我是Extension的新人请帮助我。 我的目标我不想在每个视图控制器上创建功能,减少可重用性 创建扩展程序不起作用

extension UIViewController {

     func preferredStatusBarStyle_change() -> UIStatusBarStyle {
        return UIStatusBarStyle.LightContent
    }
}
//!!!!!!!!!view1
override func viewDidLoad() {
        super.viewDidLoad()
        //preferredStatusBarStyle();
        self.preferredStatusBarStyle_change();
    }
//!!!!!!!!!view2
override func viewDidLoad() {
        super.viewDidLoad()
        //preferredStatusBarStyle();
        self.preferredStatusBarStyle_change();
    }

没有扩展工作

View1
override func viewDidLoad() {
                super.viewDidLoad()
                preferredStatusBarStyle();
            }
override func preferredStatusBarStyle() -> UIStatusBarStyle {
            return UIStatusBarStyle.LightContent
        } 
View2

     override func viewDidLoad() {
                super.viewDidLoad()
                preferredStatusBarStyle();
            }

         override func preferredStatusBarStyle() -> UIStatusBarStyle {
                return UIStatusBarStyle.LightContent
            } 

帮助我尝试理解可重用性和扩展

1 个答案:

答案 0 :(得分:0)

它不起作用,因为:

Viewcontroller会调用preferredStatusBarStyle()来定义statusbar。实际上,您删除preferredStatusBarStyle();中的viewDidload,您的控制器仍然有效。

所以在你的情况下,你可以这样解决:

你创建了一个UIViewController的子类,也许它的名字是:BaseViewController并且你放了这个类:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
     return UIStatusBarStyle.LightContent
} 

现在,您从ViewController状态栏继承的所有BaseViewController始终.LightContent您不需要将此代码放在每个位置的上方。

演示:Demo