我知道已经问过类似的问题,但没有得到满意的答案。所以我再次添加这个问题。
基于 iphone 应用程序中的用户选择,我需要更改应用程序的外观和感觉(彩色字体背景图像等)。有没有标准的方法来实现这一点?
一种可能的解决方案是为每个主题复制 xib 文件并根据选择加载它。这是一个好方法吗?主要是因为连接 xib 副本的出口和操作听起来是一项多余的任务。
我想看看专家对这个疑问的建议。感谢您提前提供任何帮助。
-mia
我知道已经问过类似的问题,但没有得到满意的答案。所以我再次添加这个问题。
基于 iphone 应用程序中的用户选择,我需要更改应用程序的外观和感觉(彩色字体背景图像等)。有没有标准的方法来实现这一点?
一种可能的解决方案是为每个主题复制 xib 文件并根据选择加载它。这是一个好方法吗?主要是因为连接 xib 副本的出口和操作听起来是一项多余的任务。
我想看看专家对这个疑问的建议。感谢您提前提供任何帮助。
-mia
正如 CodaFI 所说,如果您使用的是 iOS 5 或更高版本,那么您已经有了主题功能。它是这样工作的:
将协议添加<IAppearanceContainer>
到类。
装饰你打算改变的财产UI_APPEARANCE_SELECTOR
。例子:
@interface UINavigationBar : ...<IAppearanceContainer>
@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
@结尾
[[UINavigationBar 外观] 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。
对于非 XIB 路线
颜色:iOS 5 公开了新的外观 API。大多数 UI 元素都可以选择设置 tintColor 或 backgroundColor。很少,甚至是背景图像。
字体:始终可以更改,但您无法为其设置动画。
背景图片:您的主 UIView 应该可以选择背景图片,或者如果失败,则可以选择带有图案图片的背景颜色。
实现基于主题的应用程序 IOS 应用程序的最佳方式(不使用 ~xib 路由)。您应该创建一个包含所有主题的 build.xml 文件。您应该保持布局不变,并且可以根据用户偏好更改该布局中的图像、样式、字体、语言、视图。通过这样做,您不会复制任何代码,您将从应用程序中获得最佳性能。