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

时间:2016-08-31 20:41:51

标签: ios swift cocoa-touch ios9 uistoryboard

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

3 个答案:

答案 0 :(得分:3)

因为大多数可视属性与特定的UIViews和UIView子类(如UILabel,UIButton等)相关联,所以我建议在UIViewController级别处理这个属性会强制视图控制器负责太多特定于其他课程。

Apple用于在各种视图上设置全局可视属性的内置机制是UIAppearance API。有一个good overview of that on NSHipster

使用UIAppearance的缺点是不容易适应造型的变化,例如某些按钮为红色,而某些按钮为蓝色。它基本上是应用程序中某个视图的所有实例的固定默认外观。

我个人更喜欢使用专用样式框架,允许将预定义样式组合应用于视图。我have written about this并创建了一个framework,以便于为UIKit组件创建样式,并在故事板中应用和预览它们。

答案 1 :(得分:1)

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

您还可以为某些内容添加扩展程序。我通常在UIColor上有一个扩展,它返回一个颜色,我可以在扩展中更改它,它会在其他地方改变。

e.g。

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

答案 2 :(得分:0)

您可以为所需组件设置公共基类,例如设置视图的背景颜色,创建子类,使其名称为BackgroundView。

class UHBView: UIView {

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

}

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

enter image description here