iOS:适用于iOS应用的样式表/主题

时间:2012-12-10 23:57:42

标签: ios colors stylesheet

对于我的一个应用程序,如果客户端发出请求(我们通常会这样做,因为它是一个品牌应用程序),我目前允许自定义主题。有时这可以像简单地改变颜色方案一样简单,所以我想知道是否有办法简化过程。例如,如果我有一个名为ColourStyle的类,并且我指定了它的颜色属性值然后将其导入其他类,我可以简单地设置它,所以我所要做的就是编辑这一个类,其他人自然会根据它们的颜色在ColourStyle中设置的任何值?

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

5 个答案:

答案 0 :(得分:3)

使用类似于CSS的语法为您的应用设置样式! https://github.com/tombenner/nui

答案 1 :(得分:2)

我创建了一个Swift库,可以让你做到这一点,而且它会让你的样式在Storyboard画布上呈现为奖励!

https://github.com/daniel-hall/Stylish

答案 2 :(得分:1)

执行此操作的方法之一是您调整新的Appearance API。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

如果您登录苹果的开发者门户网站,那么就可以进行一次很好的讨论和幻灯片; 搜索高级ui自定义。

答案 3 :(得分:1)

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

如果您需要超出外观代理所能提供的自定义,则必须创建UILabel等子类,并提供自己的自定义方法。不幸的是,像UIButton这样的东西不能简单地进行子类化。你可能需要自己动手。

答案 4 :(得分: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兼容)尝试此方法。)