iOS 使用NSObject的分類實現快速切換主題
PYTheme
- An easy way to change theme through NSObject's category for iOS.
- 通過NSObject的分類實現使用簡單的主題更換。
Features
- 輕量級
- 低耦合
- 自動管理內存
- 支持動態更換主題顏色
- 支持動態更換主題圖片
- 支持CocoaPods
Requirements
- iOS 7.0 or later
- Xcode 7.0 or later
Architecture
- NSObject+PYThemeExtension
Renderings
Usage
- 使用CocoaPods:
- pod "PYTheme"
- 導入主頭文件 #import <NSObject+PYThemeExtension.h>
- 手動導入:
- 將 PYTheme 文件夾中的所有文件拽入項目中
- 導入主頭文件 #import "NSObject+PYThemeExtension.h" </ul> </li> </ul>
- 直接通過屬性
具體使用
設置主題色
1. 添加控件的屬性/方法到主題色池中
// 按鈕的背景色添加到主題色池中 [button py_addToThemeColorPool:@"backgroundColor"];
- 通過設置方法并且傳入方法對應參數數組,參數中直接含有顏色參數
// 設置按鈕選中時字體顏色添加到主題色池中 [button py_addToThemeColorPoolWithSelector:@selector(setTitleColor:forState:) objects:@[PYTHEME_THEME_COLOR, @(UIControlStateSelected)]];
- 當方法參數中沒有直接包含顏色參數,而是經過包裝(如使用NSDictionary包裝)
// 設置tabBar選中時字體顏色添加到主題色池中 NSMutableDictionary *attrSel = [NSMutableDictionary dictionary]; attrSel[NSForegroundColorAttributeName] = PYTHEME_THEME_COLOR; [childController.tabBarItem py_addToThemeColorPoolWithSelector:@selector(setTitleTextAttributes:forState:) objects:@[attrSel, @(UIControlStateSelected)]];
2. 設置主題色
// 設置主題色為紅色 [self py_setThemeColor:[UIColor redColor]];
設置主題圖片與配色
1. 添加相關控件對象到主題圖片池中
// 添加tabBarItem到主題圖片池中 [tabBarItem py_addToThemeImagePool];
2. 根據需求設置控件的相關屬性
// 重新加載主題圖片,并設置主題色為紅色 [self py_reloadThemeImageWithThemeColor:[UIColor redColor] setting:^(const NSArray<id> *objects) { // 根據控件類型完成相關設置 }
使用注意
- 對象不能是 UIAppearance ,否則將無法添加到主題池中 如下:將導致navigationBar無法添加到主題色池中
// 獲取全局navBar UINavigationBar *navBar = [UINavigationBar appearance]; // 添加背景色到主題色池中 [navBar py_addToThemeColorPool:@"barTintColor"];
-
使用 py_addToThemeColorPoolWithSelector:objects: 設置參數數組時注意:
- 方法參數必須按順序一一對應,如果涉及到的主題色設置使用 PYTHEME_THEME_COLOR 宏定義代替
- 如果數組中某個參數為nil,需包裝為 [NSNull null] 對象再添加到數組中
-
如果要使圖片隨著主題色變化而渲染成主題顏色,需要設置 RenderingMode 為:UIImageRenderingModeAlwaysTemplate
</ul>
- 如果您在使用過程中有任何問題,歡迎issue me! 很樂意為您解答任何相關問題!
- 與其給我點star,不如向我狠狠地拋來一個BUG!
- 如果想要參與這個項目的維護或者有好的功能,歡迎pull request!
- 如果您想要更多的接口來自定義或者建議/意見,歡迎issue me!我會根據大家的需求提供更多的接口!
- 如果您在使用中覺得略有不適,歡迎聯系我QQ:499491531,希望一起完善此項目,讓它變成更強大,能夠滿足大多數用戶的需求!
期待
本文由用戶 www527313 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!