开发一个包含多个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组件的样式?
答案 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)
我觉得这个库非常有用:
它就像iOS的CSS。
但是,如果您正在寻找纯iOS解决方案,请尝试在awakeFromNib
或init
而不是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
的文本颜色设置为白色。第二行使文本颜色为蓝色,但前提是UILabel
是MyCustomView
的子视图。通过这种方式,您可以轻松地从一般规则中添加例外(如果有的话)。
另请注意,效果将在运行此代码后添加UILabels
生效,因此最佳位置适用于AppDelegate
。