【问题标题】:override preferredStatusBarStyle in UIViewConrtoller extension覆盖 UIViewConrtoller 扩展中的 preferredStatusBarStyle
【发布时间】:2017-03-03 14:40:14
【问题描述】:

我想在UIViewController 的扩展中覆盖preferredStatusBarStyle,如下所示:

extension UIViewController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
      return .lightContent
    }
}

编译器抛出此错误Getter for 'preferredStatusBarStyle' with Objective-C selector 'preferredStatusBarStyle' conflicts with method 'preferredStatusBarStyle()' with the same Objective-C selector

将相同的覆盖应用于UINavigationController 而不是UIViewController 有效;但preferredStatusBarStyle 是一个由UIViewController 继承的var。

-> 为什么可以将此扩展应用到UINavigationController 而不能应用到UIViewController

【问题讨论】:

    标签: ios swift uiviewcontroller


    【解决方案1】:

    您不能通过 Swift 中的扩展在引入该属性的类上以这种方式覆盖(重新声明实现)已实现的属性。

    您绝对应该创建一个UIViewController 子类并在应用程序范围内使用它。

    不过,有一个选项。您可以使用 Objective-C 通过提供扩展类别来覆盖它,适用于 UIFont 的类似内容在这里回答:Is there a way to change default font for your application。但是,这样做并不完全安全,如果不够小心,您应该预料到独角兽会来。

    【讨论】:

    • 谢谢米奇。我不喜欢拥有 UIViewController 的自定义基类的想法,因此我必须一次又一次地在每个 UIViewController 类中实现它......
    • 不,你不会,你需要做的就是从MyBaseViewController而不是UIViewController继承所有其他控制器,并在你的MyBaseViewController中实现通用的东西。这可能是推荐的方式。
    • 当我说“我不喜欢拥有自定义 UIViewController 基类的想法”时,这正是我的想法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多