对于我的一个应用程序,如果客户端发出请求(我们通常会这样做,因为它是一个品牌应用程序),我目前允许自定义主题。有时这可以像简单地改变颜色方案一样简单,所以我想知道是否有办法简化过程。例如,如果我有一个名为ColourStyle的类,并且我指定了它的颜色属性值然后将其导入其他类,我可以简单地设置它,所以我所要做的就是编辑这一个类,其他人自然会根据它们的颜色在ColourStyle中设置的任何值?
这是可行的,还是有更简单的方法?
答案 0 :(得分:3)
使用类似于CSS的语法为您的应用设置样式! https://github.com/tombenner/nui
答案 1 :(得分:2)
我创建了一个Swift库,可以让你做到这一点,而且它会让你的样式在Storyboard画布上呈现为奖励!
答案 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.swift
和RootStyle.swift
。
使用StyleSheet微框架(与Carthage和CocoaPods兼容)尝试此方法。)