2012-12-10 83 views
0

对于我的一个应用程序,如果客户端发出请求(他们通常会这样做,因为它是品牌应用程序),我当前允许使用自定义主题。有时候,这可能与简单地改变配色方案一样简单,所以我想知道是否有办法简化这个过程。例如,如果我有一个名为ColourStyle的类,并指定了它的颜色属性值,然后将它导入到其他类中,我可以简单地设置它,因此我所要做的就是编辑这一个类,其他类将自然地基于它们的颜色无论在ColourStyle中设置什么值?iOS:Stylesheet/Theme for iOS应用程序

这是可行的,还是有一个更简单的方法?

回答

1

在iOS5 +中有一个“外观管理器”,它可以让您全面控制各种UI元素的外观质量。这里有一个教程:http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

如果你需要定制超出外观代理可以提供的东西,你将不得不创建UILabel之类的子类并提供你自己的定制方法。不幸的是,像UIButton这样的东西不能简单地分类。你可能不得不推出自己的。

1

UIAppearance是一条路可走,但我们可以通过写/使用一些新的样式引擎(如早期风格的应用程序和样式成分等)的不同性质。

我的方法,用户可以应用样式到您的子类like so

final class TitleLabel: UILabel, TitleFontStyle {} 
final class BodyLabel: UILabel, BodyFontStyle, MultilineLabelStyle {} 
final class CaptionLabel: UILabel, CaptionFontStyle, MultilineLabelStyle {} 

这里的款式,标志协议定义like so

protocol TitleFontStyle {} 
protocol BodyFontStyle {} 
protocol CaptionFontStyle {} 
protocol MultilineLabelStyle {} 

func appStyle(palette: PaletteProtocol) -> StyleProtocol { 
    return StyleSheet(styles: [ 
     Style<TitleFontStyle, UILabel> { $0.font = palette.fonts.titleFont }, 
     Style<BodyFontStyle, UILabel> { $0.font = palette.fonts.bodyFont }, 
     Style<CaptionFontStyle, UILabel> { $0.font = palette.fonts.captionFont }, 
     Style<MultilineLabelStyle, UILabel> { $0.numberOfLines = 0 } 
    ]) 
} 

有关完整的使用示例见Example项目。

实施细则见Style.swiftRootStyle.swift

StyleSheet微框架(兼容Carthage和CocoaPods!)试试这种方法。