我知道类似的问题已经被问到,但没有得到满意的答案。所以我再次添加这个问题。
根据iphone应用程序中的用户选择,我需要更改应用程序的外观(彩色字体背景图像等)。有没有标准的方法来实现这个目标?
一种可能的解决方案是复制每个主题的xib文件并根据选择加载它。这是一个好方法吗?主要是因为连接插座和xib复制声音的动作是一项冗长的任务。
我希望看到专家建议这个疑问。 感谢您提前提供任何帮助。
-mia
答案 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;//'
假设你想要模块化主题:
[x appearance] setWhatever:<plist value>]
行等值。这或多或少是来自Amit Vyawahare的小费。我说plist而不是xml,因为它们更容易阅读。除非你真的需要,否则不要复制NIB。
答案 2 :(得分:-1)
实现基于主题的应用程序IOS应用程序的最佳方式(不使用~xib路由)。你应该创建一个build.xml文件,它将包含所有主题。你应该保持你的布局相同,你可以根据用户的喜好在该布局中更改图像,样式,字体,lang,视图。通过这样做,您不会复制任何代码,您将从您的应用程序中获得最佳性能。