1

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

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

4

5 回答 5

3

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

于 2012-12-11T00:05:13.413 回答
2

我创建了一个 Swift 库,它可以让你做到这一点,此外,它还可以在 Storyboard 画布上实时呈现你的样式作为奖励!

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

于 2016-06-10T16:53:59.690 回答
1

一种方法是调整新的外观 API。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

如果你登录到苹果的开发者门户,就会有一个很好的演讲和幻灯片;搜索高级 ui 自定义。

于 2012-12-11T00:02:57.563 回答
1

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

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

于 2012-12-11T00:03:27.223 回答
1

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.swiftRootStyle.swift

使用StyleSheet微框架(与 Ca​​rthage 和 CocoaPods 兼容)尝试这种方法。

于 2016-11-12T12:30:32.900 回答