为(iphone)应用程序换肤的良好设计模式是啥?

Posted

技术标签:

【中文标题】为(iphone)应用程序换肤的良好设计模式是啥?【英文标题】:What is a good design pattern for skinning an (iphone) app?为(iphone)应用程序换肤的良好设计模式是什么? 【发布时间】:2011-06-24 13:53:09 【问题描述】:

在 XIB 中构建我所有漂亮的按钮和东西的道路还很遥远,我突然意识到人们会为质量较低的笔记本电脑多付 200 美元,“因为它是粉红色的!”但我离题了。

我需要以某种方式集中控制我的应用的配色方案,并即时更改颜色。我有几个想法,比如可能是一个单例“主题”对象,其中包含一些包含主题颜色和字体的 kvo 兼容属性,然后让视图控制器“监听”更改,并在主题更改时重新绘制所有内容。

到目前为止的问题:我需要一个指向每个 UI 对象的指针,包括表格视图单元格之类的东西——这似乎很痛苦。另一种可能性是将我所有的主题 UI 对象子类化,也许让它们自己注册为观察者,但这让我想知道这样做所需的开销,也许 KVO 甚至不是这里的方法,我不知道不知道。

所以我想知道是否有人可以分享他们过去所做的事情,哪些有效,哪些会导致大问题?

谢谢!

更新

我最终使用了一个名为 SkinDispatcher 的单例对象,它只包含许多旨在由 UIView 子类观察的属性。然后我创建了 UILabel、UIButton、UITextField 以及我碰巧使用的任何其他东西的快速而肮脏的子类。

这些子类每个都在 awakeFromNib 中查找它们的标签号并使用它来注册对适用字体和颜色的更改。

接下来我创建了一个专门用于加载样式的类,它实际上打开了一个 plist 文件,其中包含保存字体名称和 R|G|B|A 颜色的键,读取它们并将它们设置为 SkinDispatcher 中的适用属性,由键名确定。最后一步(尚未尝试)是在 StandardUserDefaults 键上为皮肤设置一个观察者,为该想法的回答者提供道具。

【问题讨论】:

我认为 ios 5 对此做了一些改进。你看过还是需要更多? 是的,iOS 5 允许更轻松地自定义 UIKit 对象,我想知道更多关于实时重新皮肤以及如何从用户的按钮按下到屏幕上的控件获取有关使用什么颜色的信息. iOS 5 仍处于保密协议下,因此您无权在此讨论。 谁编辑了我的评论?如果我没有打错大字或其他什么,我宁愿你发表新评论也不要编辑我的。 @Alex Gosselin:这是肯定的。 :-p 【参考方案1】:

您已经提到了一种可能的方法,即使用 KVO。另一种可能性是注册一个特定的通知,并在通知到达您的视图控制器时做出相应的反应。

【讨论】:

以上是关于为(iphone)应用程序换肤的良好设计模式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android主题切换(Theme)实现日夜间功能

Android一键换肤原理简述

Android一键换肤原理简述

Android一键换肤原理简述

插件化换肤方案

在HTML中。怎么样才能实现换肤的功能?