继承许多 UIViewController 的背景颜色和其他属性

Inherit background color and other attributes for many UIViewControllers

对于具有许多 UIViewController 的 iOS9+/Swift 3 应用程序,继承相同背景颜色和其他常见属性(字体、间距等)的最佳实践方法是什么... ).最好有一个共同的基础class?或者某种协议?

因为大多数视觉属性都与特定的 UIView 和 UIView sub类(如 UILabel、UIButton 等)相关联,所以我建议在 UIViewController 级别处理它会强制视图控制器对其他 类.

的太多细节负责

A​​pple 在各种视图上设置全局视觉属性的内置机制是 UIAppearance API。有一个 good overview of that on NSHipster

使用 UIAppearance 的缺点是它不容易适应样式的变化,比如一些按钮是红色的,一些按钮是蓝色的。它基本上是应用程序中特定视图的所有实例的固定默认外观。

我个人更喜欢使用允许将预定义样式组合应用到视图的专用样式框架。我 have written about this and also created a framework 有助于为 UIKit 组件创建样式并在故事板中应用和预览它们。

您可以拥有一个包含 UI 个常量的常量文件。只需在所有视图控制器中引用这些变量,如果您需要进行更改,其他所有内容也会更改。

您还可以对某些事情进行扩展。我通常在 UIColor 上有一个 returns 颜色的扩展,我可以在扩展中更改它,它会在其他任何地方更改。

例如

extension UIColor{
    class func selectedBlue() -> UIColor {
        return UIColor(red:0.25, green:0.58, blue:0.97, alpha:1)
    }
}

您可以为所需的组件创建一个公共基础 class,例如,为了设置视图的背景颜色,创建一个子class,将其名称命名为 BackgroundView。

class UHBView: UIView {

    override func awakeFromNib() {
        super.awakeFromNib()  
        self.backgroundColor = UIColor.blueColor(); //Any color you want
    }

}

现在在 Interface Builder 的身份检查器中针对任何视图将此子class 设置为自定义 class。