我最近将我的第一个应用程序发布到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文件,并且用户可以在我的应用程序中点击设置标签,点击"主题"单元格,并能够为应用程序选择不同的主题,而无需重新启动应用程序。
我知道教程会继续对此进行解释,但我不太确定我是否理解这一切。
对此的任何指导都将受到广泛赞赏。
非常感谢,
答案 0 :(得分:1)
你的问题超长,所以我必须承认我没有读完整件事。这就是说我花了很多时间使用主题,我找到的最佳解决方案是创建一个处理格式化的对象。这就是我认为你可以实现它的方式:
为主题的每个可更改部分设置一个属性:
例如,如果背景更改图像,则可以在其中使用称为背景的UIImage。如果字体颜色发生变化,那么你有一个UIFont属性。
通过添加:
创建您的格式化程序的共享实例 +(Formater *) sharedInstance; //add to .h
+ (Formater *) sharedInstance //add to .m
{
if (!_sharedInstance)
{
_sharedInstance = [[Formater alloc] init];
}
}
现在,在您的视图控制器中,您需要做的就是创建对共享项目的引用,并使用它来设置视图控制器的样式。 (请记住在viewWillAppear
中进行更改,或者在更改设置后不会更改。
瞧!