UIAppearance
は 1 つの方法ですが、何か新しいものを作成/使用することで、スタイリング エンジンのさまざまなプロパティ (以前のスタイル アプリケーションやスタイル構成など) を実現できます。
私のアプローチでは、次のようにスタイルをサブクラスに適用できます。
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 と互換性があります!)でこのアプローチを試してください。