
項目代碼放在https://github.com/SlashDevelopers/SDTheme,這個方案是從實際項目中剝離而來的,大家使用中遇到什么問題或者有什么賜教歡迎隨時留言~

Demo做的有點丑,大家多忍耐一下??
使用方法非常簡單:
初始化:
[[SDThemeManager sharedInstance] setupThemeNameArray:@[@"SDTheme-White", @"SDTheme-Black"]];
SDTheme-White和SDTheme-Black是資源主題Bundle的名稱,下面會說到資源Bundle的引入方法。
切換主題:
[[SDThemeManager sharedInstance] changeTheme:@"SDTheme-Black"];
具體設(shè)置皮膚:
具體調(diào)用非常簡單,比如需要換膚的視圖控件原本是調(diào)用backgroundColor設(shè)置顏色,只需要換成調(diào)用擴展方法theme_backgroundColor即可,例如:
self.view.theme_backgroundColor = @"block_bg";
self.textField.theme_textColor = @"text_h1";
self.image.theme_image = @"icon_face";
富文本需要用SDThemeForegroundColorAttributeName替換NSForegroundColorAttributeName,例如:
navBar.theme_titleTextAttributes = @{SDThemeForegroundColorAttributeName:@"text_h1"};
另外有些常用的屬性在XIB等可視化視圖也可以直接設(shè)置,例如:

如果直接設(shè)置屬性的方式不滿足需求,還可以自己監(jiān)聽通知SDThemeChangedNotification,收到通知之后自行做顏色圖標等切換。
資源管理
顏色字符串和圖片是放在單獨的Bundle里面進行管理的,所以剛開始要新建自己的主題Bundle.
Bundle中 新建ColorsMap.plist和Images.xcassets
- 圖片:就放在相應(yīng)的主題bundle中的Images.xcassets管理,圖片在不同主題下名字要保證一致。
- 顏色字符串:顏色字符串可以參考一下Demo中的文件,首先要有一個大分類,例如Demo中的
block、text、line(跟隨自己需要分類就好,這里的分類我是扒競品富途牛牛的??),如果你有一個分類叫SomeThing,那分類下內(nèi)容命名要帶上相應(yīng)的前綴SomeThing_,不然會報找不到,color string是HEX 或者AHEX格式。
Bundle 創(chuàng)建注意事項:
資源bundle不要直接新建文件夾之后改擴展名或者用Settings Bundle

推薦Bundle創(chuàng)建方式:

file->New->Target->macOS->Bundle
創(chuàng)建完成之后,對
Base SDK 設(shè)置為 iOS
Build Active Architecture Only 設(shè)置為 "YES"
Installation Directory 刪除掉后面的路徑
Code Signing Identity 選擇 Don't Code Sign
iOS Deployment Target 設(shè)置為 合適的版本
Skip Install 設(shè)置為 "NO"
Strip Debug Symbols During Copy 設(shè)置為 "YES"
COMBINE_HIDPI_IMAGES 設(shè)置為 "NO"
再設(shè)置一下依賴

好,到現(xiàn)在Bundle就完成了
主要實現(xiàn)原理:
其實實現(xiàn)原理也是非常簡單的,我這里拿UIView舉例子:
@interface UIView (SDTheme)
@property (nonatomic, copy) NSString *theme_backgroundColor;
@property (nonatomic, copy) IBInspectable NSString *sd_background;
@property (nonatomic, copy) NSString *theme_tintColor;
@en
這是針對UIView提供的擴展,大家可以看到其中有換膚屬性theme_backgroundColor,如下圖,我們在屬性theme_backgroundColor的Setter方法中有根據(jù)主題配置調(diào)用系統(tǒng)的相應(yīng)方法,然后對控件注冊監(jiān)聽,等切換主題之后就會收到通知,然后執(zhí)行theme_didChanged方法,為控件設(shè)置正確的主題UI,that’s all~

Mac工具
另外同事寫了一個Mac小工具也順便分享一下,找一些顏色的時候會提高一些效率。

使用的時候只要把對應(yīng)的ColorMaps拖進框即可,可能第一次需要輸入密碼,是因為對文件執(zhí)行了一個chmod 777的命令,目前只支持兩個,代碼在這里,有大佬有興趣的歡迎擴展,歡迎RP。
- 雙擊Cell 可以快速拿到對應(yīng)顏色的key到剪貼板,直接
Ctrl+V到項目代碼中即可。 - 在菜單欄-Eidt->Add Color 可以快捷添加顏色
最后:
倉庫地址:https://github.com/SlashDevelopers/SDTheme,???如果覺得本倉庫對您有幫助,請不要吝嗇你的?,感謝你的支持!???
使用中如果有任何疑問歡迎隨時留言,還請各位看官多多指教~