有没有人能解释一下NSAttributedString如何正确地遵循MVC模式?我知道它不继承自NSString,但它仍然是一个字符串,所以我会说这是我的模型的一部分。然而,设置下划线、字体、阴影等UI属性显然是视图的一部分,因此我不太确定它是如何遵循规则的。
有没有人能解释一下NSAttributedString如何正确地遵循MVC模式?我知道它不继承自NSString,但它仍然是一个字符串,所以我会说这是我的模型的一部分。然而,设置下划线、字体、阴影等UI属性显然是视图的一部分,因此我不太确定它是如何遵循规则的。
NSAttributedString是一个模型类。
它只是具有属性字符串的表示。
仅仅因为它存储了属性,并不意味着它负责属性的显示。
想象一下,如果你有一个自定义形状的类。如果你有一个正方形形状并存储它的颜色,它仍然是一个模型对象,因为展示视图要绘制正方形并填充它的颜色,而模型对象只是一个存储属性的地方。
UILabel
,那么为什么他们没有赋予它们显示这些属性的能力呢?现在,例如,如果我想要一个绿色的下划线文本,我需要在 UILabel 上设置颜色,在字符串本身上设置下划线。这似乎并不一致? - Scott BerrevoetstextColor
属性是一个方便的属性,它可以编辑底层的 attributedString
;如果您想在一个地方同时更改下划线和颜色,则可以创建具有所需样式的 attributedString
并使用 UILabel 上的 attributedString
属性进行设置。他们使用的习语为了方便而使不同文本类之间的关系更加难以理解,但在幕后其实是 MVC。 - iluvcapraNSAttributedString
提供了基础设施,是Cocoa的样式文本模型类 NSTextStorage
的超类。一个 NSTextStorage
就是一个可以与布局管理器通信并在编辑方面执行一些簿记/便利方法的 NSAttributedString
。
控制器职责由 NSLayoutManager
处理。这与将 Unicode 字符串转换为字形、对其进行样式设置以及进行各种几何计算有很大关系。它会针对 NSTextContainer
对象执行所有这些操作,在基类的情况下,这些对象只是布局管理器用来计算应在哪里描绘字形、断行位置等的高级 NSSize
。
Cocoa 用于样式文本的视图类是 NSText
及其子类,可与标尺、字体和颜色面板一起使用。 NSTextView
是一个 NSText
子类,而 NSCells
则共享一个 NSText
对象以编辑其内容。 NSText
是一个 NSResponder
,如果存在,则接受其 textStorage 和 layoutManager 的文本编辑消息。
NSAttributedString
也应该如此。 - Hyperbole