【发布时间】:2014-03-17 10:28:31
【问题描述】:
我最近在 App Store 上发布了我的第一个应用程序,但在 iOS 开发方面还有很长的路要走。
我希望将主题作为更新引入我的应用程序,以便用户可以从 4-5 个不同的主题中进行选择。
我有一个标签栏控制器,并将第 5 个标签设置为“设置”标签,其中包含一个带有单元格的表格视图。第一个单元格包含文本“主题”,用户可以在其中选择它,被带到新的表格视图/集合视图以选择主题。
所以我在网上搜索并发现了这个令人难以置信的答案:
How to create Multiple Themes/Skins for iphone apps?
因为我还是开发新手,所以我需要帮助来推动这项工作。
首先,我有两个主题:
1) 默认主题 (Newiphonebackground.png)
2) PurplePinkTheme (Purplepinknew.png)
按照说明,我为默认主题创建了一个 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;
}
在我的表格视图中,将应用主题(它将应用到应用程序中的每个屏幕,但这只是从我在应用程序中测试一个场景的地方开始),在 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";
并且在单独的Table View的viewDidLoad中,我将代码设置为:
NSString *imageName = [styles objectForKey:@"PurplePinkTheme"];
然后在加载我的应用程序时,我的 PurplePinkTheme 就会加载。
到目前为止一切都很好,但我认为我在这里没有做任何实质性的事情。
从现在开始我很困惑。我希望从仅更改应用内设置中的背景图像开始,一旦完成,我将寻求更改自定义导航栏等。
所以我的问题是:
1) 为什么我要为每个主题创建一个 plist?
2) 如何在 ThemeManager 类中链接多个 plist?
3) 如何将所有主题链接到允许用户选择的设置主题单元格?
很抱歉,这含糊不清,但我真的需要了解我能在这里继续进行下去。例如,我只是不明白如何在 ThemeManager 中拥有多个 plist 以及如何从这里继续前进。
回顾一下,我现在只想拥有多个具有不同背景的 plist 文件,并且为了让用户进入我的应用程序中的设置选项卡,单击“主题”单元格并能够选择一个应用程序的不同主题而无需重新启动应用程序。
我知道本教程确实对此进行了解释,但我不太确定我是否全部理解。
对此的任何指导将不胜感激。
非常感谢,
【问题讨论】: