iOS 使用NSObject的分類實現快速切換主題

www527313 7年前發布 | 6K 次閱讀 iOS開發 移動開發

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>
    </li>
  • 手動導入:
    • 將 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] 對象再添加到數組中
        </li>
      • 如果要使圖片隨著主題色變化而渲染成主題顏色,需要設置 RenderingMode 為:UIImageRenderingModeAlwaysTemplate

      • </ul>

        期待

        • 如果您在使用過程中有任何問題,歡迎issue me! 很樂意為您解答任何相關問題!
        • 與其給我點star,不如向我狠狠地拋來一個BUG!
        • 如果想要參與這個項目的維護或者有好的功能,歡迎pull request!
        • 如果您想要更多的接口來自定義或者建議/意見,歡迎issue me!我會根據大家的需求提供更多的接口!
        • 如果您在使用中覺得略有不適,歡迎聯系我QQ:499491531,希望一起完善此項目,讓它變成更強大,能夠滿足大多數用戶的需求!

         

         

         

 本文由用戶 www527313 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!