在iPhone应用程序中创建多个主题

时间:2014-03-17 10:28:31

标签: ios iphone themes plist

我最近将我的第一个应用程序发布到App Store,并且还有很长的路要走iOS开发。

我希望将主题作为更新引入我的应用,以便用户可以从4-5种不同的主题中进行选择。

我有一个标签栏控制器,并将第5个标签设置为"设置"包含带有单元格的表视图的选项卡。第一个单元格包含文本"主题"用户可以选择它,进入新的表视图/集合视图以选择主题。

所以我在网上搜索了这个令人难以置信的答案:

How to create Multiple Themes/Skins for iphone apps?

因为我还很擅长开发,所以我需要帮助才能实现这一目标。

首先,我有两个主题:

1)DefaultTheme(Newiphonebackground.png)

2)PurplePinkTheme(Purplepinknew.png)

按照说明,我为Default主题创建了一个plist,为PurplePink主题创建了一个plist。

在我创建的ThemeManager类中,我有:

- (id)init
{
    if ((self = [super init]))
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *themeName = [defaults objectForKey:@"theme"] ?: @"DefaultTheme";

        NSString *path = [[NSBundle mainBundle] pathForResource:themeName ofType:@"plist"];
        self.styles = [NSDictionary dictionaryWithContentsOfFile:path];
    }
    return self;
}

+ (ThemeManager *)sharedManager
{
    static ThemeManager *sharedManager = nil;
    if (sharedManager == nil)
    {
        sharedManager = [[ThemeManager alloc] init];
    }
    return sharedManager;
}

在我的表格视图中,主题将被应用(它将应用于应用中的每个屏幕,但这只是从我在哪里测试一个场景开始app),在viewDidLoad中,我把:

    NSDictionary *styles = [ThemeManager sharedManager].styles;
    NSString *imageName = [styles objectForKey:@"DefaultTheme"];
    UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
    self.tableView.backgroundView = backgroundImageView;

这没有什么不同,因为它应用了默认主题。但是,如果在ThemeManager中,我将plist更改为:

    NSString *themeName = [defaults objectForKey:@"theme"] ?: @"PurplePinkTheme";

并在单独的表视图的viewDidLoad中,我将代码设置为:

    NSString *imageName = [styles objectForKey:@"PurplePinkTheme"];

然后在加载我的应用程序时,我的PurplePinkTheme加载。

到目前为止一直很好,但我不认为我在这里做了大量工作。

我从这一点上感到困惑。我希望开始只更改应用内设置中的背景图片,一旦完成,我将会更改自定义导航栏等。

所以我的问题是:

1)为什么我为每个主题创建一个plist?

2)我究竟如何链接ThemeManager类中的多个plist?

3)如何将所有主题链接到设置主题单元格,以供用户选择?

对不起,这很模糊,但我真的需要了解我能在这里继续进行。例如,我只是不知道如何在ThemeManager中拥有多个plist以及如何从这里前进。

回顾一下,我现在只想拥有多个具有不同背景的plist文件,并且用户可以在我的应用程序中点击设置标签,点击"主题"单元格,并能够为应用程序选择不同的主题,而无需重新启动应用程序。

我知道教程会继续对此进行解释,但我不太确定我是否理解这一切。

对此的任何指导都将受到广泛赞赏。

非常感谢,

1 个答案:

答案 0 :(得分:1)

你的问题超长,所以我必须承认我没有读完整件事。这就是说我花了很多时间使用主题,我找到的最佳解决方案是创建一个处理格式化的对象。这就是我认为你可以实现它的方式:

  1. 创建一个扩展NSObject
  2. 的格式化程序对象
  3. 为主题的每个可更改部分设置一个属性:

    例如,如果背景更改图像,则可以在其中使用称为背景的UIImage。如果字体颜色发生变化,那么你有一个UIFont属性。

  4. 通过添加:

    创建您的格式化程序的共享实例
     +(Formater *) sharedInstance; //add to .h
    
    
    + (Formater *) sharedInstance //add to .m
    {
        if (!_sharedInstance)
        {
            _sharedInstance = [[Formater alloc] init];
        }
    }
    
  5. 现在,在您的视图控制器中,您需要做的就是创建对共享项目的引用,并使用它来设置视图控制器的样式。 (请记住在viewWillAppear中进行更改,或者在更改设置后不会更改。

  6. 瞧!