存储标签字体信息的位置 - 在模型或视图中?

时间:2010-10-27 11:22:29

标签: iphone cocoa-touch model-view-controller uifont

在MVC范例之后,在Cocoa-Touch中存储标签字体信息的最佳做法是什么?

在我的数据模型中,我希望将自定义视图显示的信息存储为UILabel。很明显,标签文本属于数据模型。但是,我应该在哪里存储相应的字体(在我的情况下还有颜色)信息?它们“属于”数据模型还是属于视图?

我问的原因是:如果我只是将类UIFont的属性添加到我的数据模型中,那么在序列化和复制我的数据时会遇到麻烦(因为UIFont没有实现NSCodingNSCopying协议),而我通常用于我的数据模型的其他类。 (问题不存在于UIColor,因为已有NSCoding并且可以轻松添加NSCopying,但仍然可以询问 <属性>是否属于到数据模型。)

一般来说,我希望能够序列化我的数据模型的所有属性,这似乎是MVC中非常常见和通用的模式。当然,我也可以编写字体信息的抽象,而不是直接使用UIFont作为我的数据模型中的属性。但我想知道在iOS上使用MVC的最佳实践是什么。


更新:感谢您的回答。在那些我认为在模型中存储字体信息有意义的情况下,我决定采用“样式模型”实现。为了克服上面提到的困难,我简单地为这两个类写了类别,参见this link

2 个答案:

答案 0 :(得分:2)

如果用户(或外部输入)可以选择字体,则它是模型的一部分 您可以存储字体名称

答案 1 :(得分:1)

我不希望在数据模型中存储与字体,颜色等视图相关的信息。而不是我将使用单独的类来存储所有样式信息(该类可以从plist文件中读取)。通常,应用程序中所有标签,按钮等的颜色和其他样式属性将是相同的。所以我想在单个位置更改此信息,并希望将其传播到每个标签。此样式信息与标签显示的数据无关。

摘要是我更喜欢数据和样式的分离(如果需要,可以称之为StyleModel)。显然其他人可以选择其他方式,决定也可能取决于申请细节。 (Benoît的答案显示了一个示例,其中样式信息可能是数据模型的一部分。)