【问题标题】:Inherit background color and other attributes for many UIViewControllers为许多 UIViewController 继承背景颜色和其他属性
【发布时间】:2017-01-08 13:51:48
【问题描述】:

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

【问题讨论】:

  • “如果您的问题可以用整本书来回答,或者有许多有效答案,那么对于我们的格式来说,它可能过于宽泛”

标签: ios swift cocoa-touch ios9 uistoryboard


【解决方案1】:

因为大多数视觉属性都与特定的 UIView 和 UIView 子类(如 UILabel、UIButton 等)相关联,我建议在 UIViewController 级别处理此问题会迫使视图控制器负责特定于其他类。

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

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

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

【讨论】:

  • 另一种定义可组合和可重用样式的方法,如果您有兴趣:StyleSheet
【解决方案2】:

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

您还可以对某些内容进行扩展。我通常在 UIColor 上有一个扩展,它返回一种颜色,我可以在扩展中更改它,它会在其他任何地方发生变化。

例如

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 这似乎是一个运行时属性,我的印象是协议比 Swift 中的继承更好......但我真的不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2019-07-31
    • 2020-09-20
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多