通过整个应用程序设计UILabel的样式

时间:2015-10-29 10:18:11

标签: ios iphone swift

开发一个包含多个UIViewControllers包含UILabel组件的应用程序。很多UIViewControllers具有相同的设置标题,副标题,子文本和/或文本。在每个UIViewControllers我不断更改字体大小,颜色和更多变量,因此我想对所有UIView组件使用类似样式的内容,因此所有更改都会影响所有ViewControllers中的所有组件。

我创建了自定义UILabel类,并在我的故事板中将其与实现默认样式的自定义类相关联。但它不能正常工作。

class UICustomLabel: UILabel 
{
  override func layoutSubviews()
  {
    super.layoutSubviews()
    self.font = UIFont(name: Style.FontNameDefault, size: Style.FontSizeDefault);
  }
}

class UILabelTitle: UILabel 
{
  override func layoutSubviews()
  {
    super.layoutSubviews()
    self.font = UIFont(name: Style.FontNameTitle, size: Style.FontSizeTitle);
  }
}

是否有更好的方法可以通过整个应用程序以相同的方式设置所有UIView组件的样式?

3 个答案:

答案 0 :(得分:1)

您可以在UILabel上进行扩展,为您需要的所有标签类型提供多种工厂方法。

extension UILabel {
    class func stl_titleLabel() -> UILabel {
        let label = UILabel()
        label.font = ...
        return label
    }
    class func stl_commentLabel(frame: CGRect, color: UIColor) -> UILabel { // whatever arguments you need
        let label = UILabel(frame)
        label.font = ...
        label.textColor = color
        return label
    } 
}

代码中可能存在一些语法错误,因为我对swift不太好,但我认为你明白了。我希望它有所帮助。

编辑:哎呀,我错过了你使用故事板。如果使用代码创建标签,我的解决方案将起作用。也许有一种方法可以将它与故事板结合起来,但我不知道如何。

答案 1 :(得分:0)

我觉得这个库非常有用:

NUIMotif

它就像iOS的CSS。

但是,如果您正在寻找纯iOS解决方案,请尝试在awakeFromNibinit而不是layoutSubviews中设置字体属性。另外,请确保ViewControllers中的IBOutlets具有正确的声明(例如UITitleLabel而不是UILabel

答案 2 :(得分:0)

有一种内置的方法可以实现这一点 - 它被称为UIAppearance。该协议由所有系统视图实现。您可以阅读更多here

一个小例子:

[[UILabel appearance] setTextColor:[UIColor whiteColor]];
[[UILabel appearanceWhenContainedIn:[MyCustomView class]] setTextColor:[UIColor blueColor]]

对不起,例如在Obj-C中,这也可以在Swift中使用。

第一行将所有UILabels的文本颜色设置为白色。第二行使文本颜色为蓝色,但前提是UILabelMyCustomView的子视图。通过这种方式,您可以轻松地从一般规则中添加例外(如果有的话)。

另请注意,效果将在运行此代码后添加UILabels生效,因此最佳位置适用于AppDelegate