7

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

基于 iphone 应用程序中的用户选择,我需要更改应用程序的外观和感觉(彩色字体背景图像等)。有没有标准的方法来实现这一点?

一种可能的解决方案是为每个主题复制 xib 文件并根据选择加载它。这是一个好方法吗?主要是因为连接 xib 副本的出口和操作听起来是一项多余的任务。

我想看看专家对这个疑问的建议。感谢您提前提供任何帮助。

-mia

4

3 回答 3

0

正如 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;//'

假设您想要模块化主题:

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

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

于 2013-02-24T11:49:28.380 回答
0

对于非 XIB 路线

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

字体:始终可以更改,但您无法为其设置动画。

背景图片:您的主 UIView 应该可以选择背景图片,或者如果失败,则可以选择带有图案图片的背景颜色。

于 2012-01-11T13:48:47.867 回答
-1

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

于 2012-01-11T13:58:51.513 回答