1

任何人都可以向我解釋NSAttributedString如何正確遵循MVC範例嗎?我知道它不是從NSString繼承的,但它仍然是一個字符串,所以我會說這是我的模型的一部分。然而,設置界面屬性,如下劃線,字體,陰影等顯然是MVC的一部分,所以我不確定這是如何遵循規則的。NSAttributedString如何遵循MVC範例?

+0

誰說它必須符合MVC? –

+0

蘋果公司的大多數東西都是符合MVC的,所以它有道理,也就是'NSAttributedString'。 – Hyperbole

回答

6

NSAttributedString是一個模型類。

它只是表示屬性字符串。

僅僅因爲它存儲的屬性,並不負責顯示的屬性。

想象一下,您有一個自定義形狀類。如果你有一個正方形的形狀並存儲它的顏色,它仍然是一個模型對象,因爲它取決於呈現視圖來繪製正方形並用顏色填充它,模型對象只是存儲屬性的地方。

+0

這確實有道理,但他們爲什麼不讓這些屬性成爲顯示字符串的視圖的一部分?據我所知,UIKit中顯示的大多數文本都是基於'UILabel'的,所以爲什麼他們不給它們顯示這些屬性的能力呢?現在,例如,如果我想要一個帶綠色下劃線的文本,我在UILabel上設置顏色,並在字符串本身上設置下劃線。看起來並不一致? –

+0

'textColor'屬性是一種方便,它編輯底層的'attributesString';如果你想在一個地方改變下劃線和顏色,你可以用你想要的樣式創建一個屬性字符串,並使用UILabel上的'屬性字符串'屬性來設置它。他們使用的習慣使得爲了方便起見,不同文本類之間的關係更加模糊,但是在其MVC的背後。 – iluvcapra

+0

好吧,那我現在看看它是如何工作的,謝謝! –

2

NSAttributedString提供基礎設施,並且是可可風格文本模型類NSTextStorage的超類。一個NSTextStorage只是一個NSAttributedString,可以與佈局管理器交談,並執行一些關於編輯的簿記/便利方法。

控制器的職責由NSLayoutManager處理。這很大程度上與將unicode字符串轉換爲字形,設計它們並進行各種幾何計算有關。它完成了關於NSTextContainer對象的所有操作,其中(在基類的情況下)只是看中了NSSize s佈局管理器可以使用它來計算字形應該在哪裏觸發,哪裏應該發生換行等。

可可的風格文本視圖類是NSText及其子類,使用標尺,字體和顏色面板。 NSTextViewNSText子類,而NSCells共享NSText對象以編輯其內容。 NSTextNSResponder,它接受textStorage和layoutManager(如果存在)的文本編輯消息。