对于我的一个应用程序,如果客户提出请求(他们通常这样做,因为它是一个品牌应用程序),我目前允许自定义主题。有时这可以像简单地更改配色方案一样简单,所以我想知道是否有办法简化这个过程。例如,如果我有一个名为 ColourStyle 的类,我指定了它的颜色属性值,然后将其导入到其他类,我是否可以简单地设置它,这样我所要做的就是编辑这个类,其他类自然会基于它们的颜色在 ColourStyle 中设置的任何值?
这是可行的,还是有更简单的方法?
对于我的一个应用程序,如果客户提出请求(他们通常这样做,因为它是一个品牌应用程序),我目前允许自定义主题。有时这可以像简单地更改配色方案一样简单,所以我想知道是否有办法简化这个过程。例如,如果我有一个名为 ColourStyle 的类,我指定了它的颜色属性值,然后将其导入到其他类,我是否可以简单地设置它,这样我所要做的就是编辑这个类,其他类自然会基于它们的颜色在 ColourStyle 中设置的任何值?
这是可行的,还是有更简单的方法?
使用类似于 CSS 的语法为您的应用程序设置样式! https://github.com/tombenner/nui
我创建了一个 Swift 库,它可以让你做到这一点,此外,它还可以在 Storyboard 画布上实时呈现你的样式作为奖励!
一种方法是调整新的外观 API。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html
如果你登录到苹果的开发者门户,就会有一个很好的演讲和幻灯片;搜索高级 ui 自定义。
在 iOS5+ 中有一个“外观管理器”,可以让您全局控制各种 UI 元素的外观质量。这是一个教程:http ://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
如果您需要外观代理无法提供的自定义功能,则必须创建 UILabel 之类的子类并提供您自己的自定义方法。不幸的是,像 UIButton 这样的东西不能简单地被子类化。你可能不得不自己动手。
UIAppearance
是一种方法,但我们可以通过编写/使用新的东西来实现样式引擎的不同属性(如早期的样式应用和样式组合等)。
我的方法允许将样式应用于您的子类,如下所示:
final class TitleLabel: UILabel, TitleFontStyle {}
final class BodyLabel: UILabel, BodyFontStyle, MultilineLabelStyle {}
final class CaptionLabel: UILabel, CaptionFontStyle, MultilineLabelStyle {}
样式标记协议的定义如下:
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 }
])
}
有关完整的使用示例,请参阅示例项目。
有关实现细节,请参见Style.swift
和RootStyle.swift
。
使用StyleSheet微框架(与 Carthage 和 CocoaPods 兼容!)尝试这种方法。