Ios NSAttributedString如何遵循MVC范式?

Ios NSAttributedString如何遵循MVC范式?,ios,objective-c,model-view-controller,nsattributedstring,Ios,Objective C,Model View Controller,Nsattributedstring,有人能给我解释一下NSAttributedString是如何正确遵循MVC范式的吗?我知道它不是从NSString继承的,但它仍然是一个字符串,所以我想说这是我模型的一部分。但是,当谈论MVC时,设置UI属性(如下划线、字体、阴影等)显然是视图的一部分,因此我不确定这是如何遵循规则的。NSAttributedString是一个模型类 它只有属性字符串的表示形式 仅仅因为它存储了属性,这并不意味着它负责属性的显示 假设您有一个自定义的形状类。如果您有一个正方形并存储了它的颜色,它仍然是一个模型对象

有人能给我解释一下NSAttributedString是如何正确遵循MVC范式的吗?我知道它不是从NSString继承的,但它仍然是一个字符串,所以我想说这是我模型的一部分。但是,当谈论MVC时,设置UI属性(如下划线、字体、阴影等)显然是视图的一部分,因此我不确定这是如何遵循规则的。

NSAttributedString是一个模型类

它只有属性字符串的表示形式

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


假设您有一个自定义的形状类。如果您有一个正方形并存储了它的颜色,它仍然是一个模型对象,因为绘制正方形并用颜色填充它取决于显示视图,模型对象只是一个存储属性的地方。

NSAttributedString
提供了基础结构,是Cocoa的样式文本模型类的超类,
NSTextStorage
NSTextStorage
只是一个
NSAttributedString
,它可以与布局管理器对话,并在编辑方面执行一些簿记/方便的方法

控制器职责由
NSLayoutManager
处理。这与将unicode字符串转换为glyph、设置它们的样式以及进行各种几何计算有很大关系。它对
NSTextContainer
对象执行所有这些操作,这些对象(在基类的情况下)只是布局管理器可以用来计算字形应该划过的位置、应该发生换行的位置等


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

谁说它必须符合MVC?苹果的大部分内容都符合MVC,所以
NSAttributedString
也应该符合MVC。这是有道理的,但是为什么他们不让这些属性成为显示字符串的视图的一部分呢?据我所知,UIKit中显示的大多数文本都是基于
UILabel
s的,那么为什么他们不给他们显示这些属性的能力呢?现在,例如,如果我想要一个带绿色下划线的文本,我在UILabel上设置颜色,在字符串本身上设置下划线。看起来不太一致吗?
textColor
属性可以方便地编辑底层的
attributedString
;如果要在一个位置同时更改下划线和颜色,可以创建一个具有所需样式的attributedString,并使用UILabel上的
attributedString
属性进行设置。为了方便起见,他们使用的习惯用法使不同文本类之间的关系变得更加模糊,但在MVC的保护下。