创建多主题应用程序的最佳方法是什么

时间:2011-03-04 11:12:11

标签: iphone objective-c

我需要创建一个应该有多个主题的应用程序。这意味着对于每个主题,我们使用不同的图像集。应该更改主题而不重新加载所有视图控制器(只需更改图像)。主题可以通过In app购买添加,因此不应该硬编码。

我还想使用Interface Builder来创建我的视图。

问题:最好的方法是什么?

3 个答案:

答案 0 :(得分:0)

我建议我在答案中详述的方法:

Is there a simple way to set a default font for the whole app?

您可以在应用中使用视图控制器,请求ThemeApplicator类在必要时设置样式。它会通过设置正确的背景图像来实现这一点。您仍然可以使用IB来构建您的视图;只是不要在IB中设置背景(或设置默认背景)。关键是您以后以编程方式更新背景。

答案 1 :(得分:0)

在MyAppNotificationUIThemeChanged上,每个控制器都必须在其主视图中为每个UIImageView检索和设置图像。我可以想到两种方法:

1)蛮力。像这样:

self.imageView1.image = [self currentThemeImage:@"someController_image1.png"];
self.imageView2.image = [self currentThemeImage:@"someController_image2.png"];

2)自动化方法。

NSArray *imageViews = [self fetchAllImageViews];
foreach (UIImageView *iv in imageViews) {
  iv.image = [self currentThemeImageForTag:iv.tag];
}

其中currentThemeImageForTag:是这样的:

- (UIImage*)currentUIThemeImageForTag:(NSUInteger)imageTag {
  return [self currentUIThemeImage:[NSString stringWithFormat:@"%@_%u.png", NSStringFromClass([self class]), imageTag]];
}

我还建议使用NSBundle打包主题图像和其他资源。

<强>更新

我选择NSBundle只是因为它有很酷的方法,比如pathForResource:ofType:等等,还有支持本地化的能力。您可以使用XCode创建包(只需在Mac OS X下查看 - >新项目对话框中的Framework&amp; Library部分)。把你的图像放在参考资料中,删除任何框架(无论如何都没有代码),构建就是这样。在您的应用加载包中[NSBundle bundleWithPath:pathToDownloadedBundle]。请注意:我不知道Apple是否允许下载捆绑包并在应用程序中使用它的内容。我能保证的是它可以在模拟器上运行。

答案 2 :(得分:0)

查看Three20项目,尤其是Three20Style