【问题标题】:How to create a theme based application?如何创建基于主题的应用程序?
【发布时间】:2012-01-11 13:42:12
【问题描述】:

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

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

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

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

-米娅

【问题讨论】:

    标签: ios uiappearance


    【解决方案1】:

    对于非XIB路线

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

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

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

    【讨论】:

    • 这只是根据选择动态设置颜色。很好,但我正在寻找一个有效的选项,如主题或样式,我可以简单地动态切换主题,同时我不必在代码中显式处理或复制 nib。
    • [UIButton setTintColor:[UIColor someColor]];你必须自己处理一切。为每个“新样式”创建几个带有一些预设颜色值的方法
    【解决方案2】:

    正如 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。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 对不起,我不明白你的解释。你能解释一下吗?这也不是动态rt?表示当程序启动并运行时,用户无法切换主题。
      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      相关资源
      最近更新 更多