酷奇每日推荐 2021-09-07

在APP中,肯定会用到UILabel,例如标题,内容,脚注等等,都以文字内容的形式进行展示。此时A页面有标题,B页面也有标题,那么设计一个TitleLabel,是不是有必要?

个人觉得还是非常有必要的,虽然可能每个Label的定义也就多两行字体和颜色的设定,但是如果APP有10处地方用到了标题Label,那么你就需要重复10遍,同时对修改也极其不友好。

所以,一旦某一个控件需要以同样的风格出现在多个地方,那么我还是建议新建一个类来定义。同时,如果这个类的风格,可以通过配置文件来设置,那么就更加好了。

今天要推荐给大家的是SwiftTheme
目前iOS平台上最方便的换肤框架,而且功能丰富、高性能、可扩展,提供一个全新的换肤解决方案,使用纯Swift编写,但完全兼容OC。

结合SwiftTheme的plist模式,可以通过配置文件来定义每个控件的风格。

目前大致的想法是这样:以Label为例,首先需要定义INSLabel继承UILabel,通过SwiftTheme以Plist的方式配置字体和颜色。

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        NSString *classString = NSStringFromClass([self class]);
        NSString *fontPath = [NSString stringWithFormat:@"%@.textFont", classString];
        NSString *textColorPath = [NSString stringWithFormat:@"%@.textColor", classString];

        self.theme_font = [ThemeFontPicker pickerWithKeyPath:fontPath map:^UIFont * _Nullable(id _Nullable map) {
            NSString *fontString = (NSString *)map;
            NSArray *stringArray = [fontString componentsSeparatedByString:@","];
            return [UIFont fontWithName:stringArray[0] size:[stringArray[1] integerValue]];
        }];
        
        self.theme_textColor = [ThemeColorPicker pickerWithKeyPath:textColorPath];
    }
    
    return self;
}

此后,考虑APP会使用到Title,SubTitle,Footer这三种不同风格的Label,所以需要从INSLabel继承,定义INSTitleLabel, INSSubTitleLabel, INSFooterLabel。此时,再在Plist配置文件中添加并定义对应的风格即可,例如:


截屏2021-09-16 下午6.26.31.png

这样看上去继承层次略多了一些,所以也可以考虑用方法交换,取消掉INSTitle这一层。

又或者是否考虑可以定义一些自己的UI类库。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容