我尝试为 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
}
帮助我尝试理解可重用性和扩展
答案 0 :(得分:0)
它不起作用,因为:
Viewcontroller会调用preferredStatusBarStyle()
来定义statusbar
。实际上,您删除preferredStatusBarStyle();
中的viewDidload
,您的控制器仍然有效。
所以在你的情况下,你可以这样解决:
你创建了一个UIViewController
的子类,也许它的名字是:BaseViewController
并且你放了这个类:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
现在,您从ViewController
状态栏继承的所有BaseViewController
始终.LightContent
您不需要将此代码放在每个位置的上方。
演示:Demo