点击上方“程序员大咖”,选择“置顶公众号”
项目代码放在https://github.com/SlashDevelopers/SDTheme,这个方案是从实际项目中剥离而来的,大家使用中遇到什么问题或者有什么赐教欢迎随时留言~
Demo运行效果图
Demo做的有点丑,大家多忍耐一下
使用方法非常简单:
扫描二维码关注公众号,回复:
2061270 查看本文章
初始化:
[[SDThemeManager sharedInstance] setupThemeNameArray:@[@"SDTheme-White", @"SDTheme-Black"]];
SDTheme-White
和SDTheme-Black
是资源主题Bundle的名称,下面会说到资源Bundle的引入方法。
切换主题:
[[SDThemeManager sharedInstance] changeTheme:@"SDTheme-Black"];
具体设置皮肤:
具体调用非常简单,比如需要换肤的视图控件原本是调用backgroundColor
设置颜色,只需要换成调用扩展方法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等可视化视图也可以直接设置,例如:
如果直接设置属性的方式不满足需求,还可以自己监听通知SDThemeChangedNotification
,收到通知之后自行做颜色图标等切换。
资源管理
颜色字符串和图片是放在单独的Bundle里面进行管理的,所以刚开始要新建自己的主题Bundle.
Bundle中 新建ColorsMap.plist
和Images.xcassets
图片:就放在相应的主题bundle中的Images.xcassets管理,图片在不同主题下名字要保证一致。
颜色字符串:颜色字符串可以参考一下Demo中的文件,首先要有一个大分类,例如Demo中的
block、text、line
(跟随自己需要分类就好,这里的分类我是扒竞品富途牛牛
的