之前多次看到有人问怎么实现xib中的颜色管理,就是app切换主题色的时候,xib中的颜色也会跟着变化。其实自己一开始也是没有比较好的方案的,后来学习到
IB_DESIGNABLE
和IBInspectable
两个属性,联想到xib设置主题色,自己试了下,通过这种方式是可以实现全局设置xib的主题色的,现总结在这,希望可以帮到更多需要的兄dei。
Tips:关于IB_DESIGNABLE
和 IBInspectable
这两个属性,可以参考这篇文章
Ⅰ给UIView增加分类Category,在.h中声明一个bgColor属性,使用
IBInspectable
修饰该属性,如下
#import <UIKit/UIKit.h>
@interface UIView (LGCategory)
@property (nonatomic, strong) IBInspectable UIColor * bgColor;
@end
Ⅱ 完成上一步之后,在xib中就会增加一个输入框,如图所示:
Ⅲ 选中想要跟随主题色变色的控件,给BgColor属性随便设置一个颜色即可,如图:
Tips:不想跟随主题色变色不需要设置该属性,直接Default即可
Ⅳ 然后重写第一步声明的那个属性的setter和getter方法,如下:
#import "UIView+LGCategory.h"
@implementation UIView (LGCategory)
- (UIColor *)bgColor
{
return self.backgroundColor;
}
-(void)setBgColor:(UIColor *)bgColor
{
self.backgroundColor = THEME_COLOR; // 在这里将颜色改为自己的主题色即可
}
@end
Ⅴ 然后在切换主题色的时候直接修改THEME_COLOR就可以了,效果如下:
Ⅵ 如果想要设置文本颜色,可以增加一个TextColor属性,然后在setter方法里面判断一些类型,设置文字颜色即可。如果各位大佬还有更好的方案,请留言讨论~