2012-12-10 26 views
0

對於我的一個應用程序,如果客戶端發出請求(他們通常會這樣做,因爲它是品牌應用程序),我當前允許使用自定義主題。有時候,這可能與簡單地改變配色方案一樣簡單,所以我想知道是否有辦法簡化這個過程。例如,如果我有一個名爲ColourStyle的類,並指定了它的顏色屬性值,然後將它導入到其他類中,我可以簡單地設置它,因此我所要做的就是編輯這一個類,其他類將自然地基於它們的顏色無論在ColourStyle中設置什麼值?iOS:Stylesheet/Theme for iOS應用程序

這是可行的,還是有一個更簡單的方法?

回答

1

在iOS5 +中有一個「外觀管理器」,它可以讓您全面控制各種UI元素的外觀質量。這裏有一個教程:http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

如果你需要定製超出外觀代理可以提供的東西,你將不得不創建UILabel之類的子類並提供你自己的定製方法。不幸的是,像UIButton這樣的東西不能簡單地分類。你可能不得不推出自己的。

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!)試試這種方法。