主题切换

原创 2015年11月19日 11:30:37

//更主题的通知

#define ThemeChangeNotification @"ThemeChangeNotification"  //更改主题的通知

#define ThemeName @"ThemeName"                              //主题名称


#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>


@interface ConfigurationTheme : NSObject{

@private

    //主题配置信息

    NSDictionary *_themesConfig;

}


@property (copy, nonatomic) NSString *themeName;            //当前使用的主题名称

@property (strong, nonatomic) NSDictionary *themesConfig;   //主题配置信息

@property (strong, nonatomic) NSDictionary *fontConfig; //字体的配置信息


//创建单例,确保该对象唯一

+ (ConfigurationTheme *)shareInstance;


//获取当前主题下的图片名称

-(UIImage *)getThemeImageName:(NSString *)imageName;

//获取当前主题下的颜色

- (UIColor *)getThemeColorWithName:(NSString *)colorName;


@end


#import "ConfigurationTheme.h"


@implementation ConfigurationTheme


//创建单例,确保该对象唯一

+ (ConfigurationTheme *)shareInstance{

    

    static ConfigurationTheme *configuration = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        configuration = [ConfigurationTheme new];

    });

    return configuration;

}


//重写init方法

-(id)init{

    

    self = [super init];

    if (self != nil) {

        

        //读取主题配置文件

        NSString *filePlist = [[NSBundle mainBundle] pathForResource:@"theme" ofType:@"plist"];

        _themesConfig = [NSDictionary dictionaryWithContentsOfFile:filePlist];

        

        //读取字体配置文件

        NSString *fontConfigPlist = [[NSBundle mainBundle] pathForResource:@"fontColor" ofType:@"plist"];

        

        _fontConfig = [NSDictionary dictionaryWithContentsOfFile:fontConfigPlist];

        

        self.themeName = @"默认";

    }

    

    return  self;

}


//得到当前主题名称

- (void)setThemeName:(NSString *)themeName{

    if (_themeName != themeName) {

        _themeName = [themeName copy];

    }

    

    //获取主题配置的根目录

    NSString *themePath = [self getThemePath];

    NSString *filePath = [themePath stringByAppendingPathComponent:@"fontColor.plist"];

    _fontConfig = [NSDictionary dictionaryWithContentsOfFile:filePath];

    

}


//获取当前主题配置的目录

- (NSString *)getThemePath{

    

    //项目的根路径

    NSString *resourcePath = [[NSBundle mainBundle] resourcePath];

    

    if ([_themeName isEqualToString:@"默认"]) {

        return resourcePath;

    }

    

    //获取当前主题的配置路径

    NSString *configurationPath = [_themesConfig objectForKey:_themeName];

    

    //主题的完整路径

    NSString *themePath = [resourcePath stringByAppendingPathComponent:configurationPath];

    

    return themePath;

}


//获取当前主题下的图片

-(UIImage *)getThemeImageName:(NSString *)imageName{

    if (imageName.length == 0) {

        return nil;

    }

    //获取当前主题配置的目录

    NSString *configurationPath = [self getThemePath];

    //图片名称在当前主题的文件路径

    NSString *imagePath = [configurationPath stringByAppendingPathComponent:imageName];

    UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

    

    return image;

}


//获取当前主题下的颜色

- (UIColor *)getThemeColorWithName:(NSString *)colorName{

    if (colorName.length == 0){

        return nil;

    }

    

    NSString *rgb = [self.fontConfig objectForKey:colorName];

    NSArray *rgbs = [rgb componentsSeparatedByString:@","];

    

    if (rgbs.count == 3)

    {

        float r = [rgbs[0] floatValue];

        float g = [rgbs[1] floatValue];

        float b = [rgbs[2] floatValue];

        UIColor *color = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1];

        return color;

    }

    

    return nil;

}


+ (id)copyWithZone:(NSZone *)zone

{

    return self;

}



@end

配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

<key>默认</key>

<string>Skins/default</string>

<key>nt</key>

<string>Skins/nt</string>

</dict>

</plist>

使用:

_switchButton = [[UISwitch alloc] initWithFrame:CGRectMake(screenWidth-20-42, 15, 42, 22)];

            

            //根据沙盒里的值来控制switch的开关

            NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

            NSString *passWord = [ user objectForKey:@"userPassWord"];

            if (!(passWord == nil) && [passWord isEqualToString:@"123456"]){

                [_switchButton setOn:NO];

            }else{

                [_switchButton setOn:YES];

            }

            

            _switchButton.tag=indexPath.row+10001;

            [_switchButton addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];

            

            [cell.contentView addSubview:_switchButton];


-(void)switchAction:(id)sender{


    //取出选中的主题名称

    NSString *themeName = [ConfigurationTheme shareInstance].themeName;

    

    if ([themeName isEqualToString:@"默认"]){

        themeName = @"nt";


        //往沙盒存个值

        NSString *passWord = @"11111";

        NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

        [user setObject:passWord forKey:@"userPassWord"];

        

    }else{

        

        themeName = @"默认";

        //往沙盒存个值

        NSString *passWord = @"123456";

        NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

        [user setObject:passWord forKey:@"userPassWord"];

    }

    

    [ConfigurationTheme shareInstance].themeName = themeName;

    [[NSNotificationCenter defaultCenter] postNotificationName:ThemeChangeNotification object:nil];

    //保存主题到本地

    [[NSUserDefaults standardUserDefaults] setObject:themeName forKey:ThemeName];

    [[NSUserDefaults standardUserDefaults] synchronize];

    

    [_myTableView reloadData];

}




android主题切换demo

  • 2015年11月19日 17:26
  • 2.1MB
  • 下载

Android 主题动态切换

  • 2016年02月17日 17:25
  • 3.72MB
  • 下载

关于三种『应用内主题切换』开源项目的一点思考

Theme 遍历View 开源项目 MultipleTheme Colorful AndroidChangeSkin 我的思考 参考文章 关于我 这里讨论的只是白天、夜晚主题切换这种场景,不涉及外部资...

Android 实现一键切换应用主题颜色

  • 2016年05月09日 15:45
  • 2.39MB
  • 下载

安卓主题切换

1自定义部分属性1. 2. 3. 4. 5.
  • lin_t_s
  • lin_t_s
  • 2016年11月10日 10:55
  • 166

Android LayoutInflater.Factory主题切换

  • 2016年05月13日 11:05
  • 360KB
  • 下载

Android 日间/夜间模式 主题切换

  • 2015年09月29日 16:21
  • 12.17MB
  • 下载

Android 动态切换主题

在values文件夹中定义若干种style,在Activity的onCreate中使用setTheme方法设置主题。1.定义属性 attrs.xml里定义了几种属性 ...

主题切换应用

  • 2016年09月28日 12:03
  • 20.4MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:主题切换
举报原因:
原因补充:

(最多只允许输入30个字)