NSAttributedString如何遵循MVC模式?

3

有没有人能解释一下NSAttributedString如何正确地遵循MVC模式?我知道它不继承自NSString,但它仍然是一个字符串,所以我会说这是我的模型的一部分。然而,设置下划线、字体、阴影等UI属性显然是视图的一部分,因此我不太确定它是如何遵循规则的。


谁说它必须符合MVC? - Hot Licks
大多数苹果的东西都符合MVC标准,因此NSAttributedString也应该如此。 - Hyperbole
2个回答

9

NSAttributedString是一个模型类。

它只是具有属性字符串的表示。

仅仅因为它存储了属性,并不意味着它负责属性的显示。

想象一下,如果你有一个自定义形状的类。如果你有一个正方形形状并存储它的颜色,它仍然是一个模型对象,因为展示视图要绘制正方形并填充它的颜色,而模型对象只是一个存储属性的地方。


这确实有道理,但为什么他们不将这些属性作为显示字符串的视图的一部分呢?据我所知,UIKit 中显示的大多数文本都基于 UILabel,那么为什么他们没有赋予它们显示这些属性的能力呢?现在,例如,如果我想要一个绿色的下划线文本,我需要在 UILabel 上设置颜色,在字符串本身上设置下划线。这似乎并不一致? - Scott Berrevoets
textColor 属性是一个方便的属性,它可以编辑底层的 attributedString;如果您想在一个地方同时更改下划线和颜色,则可以创建具有所需样式的 attributedString 并使用 UILabel 上的 attributedString 属性进行设置。他们使用的习语为了方便而使不同文本类之间的关系更加难以理解,但在幕后其实是 MVC。 - iluvcapra

2

NSAttributedString 提供了基础设施,是Cocoa的样式文本模型类 NSTextStorage 的超类。一个 NSTextStorage 就是一个可以与布局管理器通信并在编辑方面执行一些簿记/便利方法的 NSAttributedString

控制器职责由 NSLayoutManager 处理。这与将 Unicode 字符串转换为字形、对其进行样式设置以及进行各种几何计算有很大关系。它会针对 NSTextContainer 对象执行所有这些操作,在基类的情况下,这些对象只是布局管理器用来计算应在哪里描绘字形、断行位置等的高级 NSSize

Cocoa 用于样式文本的视图类是 NSText 及其子类,可与标尺、字体和颜色面板一起使用。 NSTextView 是一个 NSText 子类,而 NSCells 则共享一个 NSText 对象以编辑其内容。 NSText 是一个 NSResponder,如果存在,则接受其 textStorage 和 layoutManager 的文本编辑消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接