如何创建基于主题的应用程序?

时间:2012-01-11 13:42:13

标签: ios uiappearance

我知道类似的问题已经被问到,但没有得到满意的答案。所以我再次添加这个问题。

根据iphone应用程序中的用户选择,我需要更改应用程序的外观(彩色字体背景图像等)。有没有标准的方法来实现这个目标?

一种可能的解决方案是复制每个主题的xib文件并根据选择加载它。这是一个好方法吗?主要是因为连接插座和xib复制声音的动作是一项冗长的任务。

我希望看到专家建议这个疑问。 感谢您提前提供任何帮助。

-mia

3 个答案:

答案 0 :(得分:0)

对于非XIB路线

颜色:iOS 5公开了新的外观API。如果设置tintColor或backgroundColor,大多数UI元素都有选项。很少,甚至是背景图片。

字体:总是能够改变,但你无法动画它。

背景图片:您的主要UIView应该具有背景图像选项,或者如果失败,则应该具有带有图案图像的背景颜色。

答案 1 :(得分:0)

正如CodaFI所说,如果您使用的是iOS 5或更高版本,那么您已经拥有主题功能。它的工作原理如下:

  • 将协议<IAppearanceContainer>添加到班级。

  • 使用UI_APPEARANCE_SELECTOR装饰您要更改的媒体资源。例:

    @interface UINavigationBar : ... <IAppearanceContainer>
    @property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
    @end
    

  • 更改班级所有实例的颜色:
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
    

上面的示例是UINavigationBar,但它适用于任何自定义类。要查看iOS 6.1中已支持的对象,请查看文档或运行以下命令:

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers

grep -H UI_APPEARANCE_SELECTOR ./* | sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//'

假设你想要模块化主题:

  • 写一个包含所有字体,颜色,音乐和其他内容的大plist文件。这些文件中的每一个都是主题。
  • 通过单例读取文件,并为每个可主题元素设置[x appearance] setWhatever:<plist value>]行等值。
  • 如果您有相同元素的实例需要显示不同的元素,请通过单例获取这些图像。

这或多或少是来自Amit Vyawahare的小费。我说plist而不是xml,因为它们更容易阅读。除非你真的需要,否则不要复制NIB。

答案 2 :(得分:-1)

实现基于主题的应用程序IOS应用程序的最佳方式(不使用~xib路由)。你应该创建一个build.xml文件,它将包含所有主题。你应该保持你的布局相同,你可以根据用户的喜好在该布局中更改图像,样式,字体,lang,视图。通过这样做,您不会复制任何代码,您将从您的应用程序中获得最佳性能。