Attributed Text: ano ito, mga uri ng atributo at pag-istilo

May-akda: IT Sectr Nai-publish: 2026-07-23 Oras ng pagbabasa: 8 min

Attributed Text ay isang mekanismo ng iOS SDK, na kinakatawan ng mga klase na NSAttributedString at NSMutableAttributedString, na nagpapahintulot sa paglalapat ng maraming estilo sa iba't ibang bahagi ng isang string ng teksto. Hindi tulad ng karaniwang NSString, ang Attributed String ay nag-iimbak hindi lamang ng mga karakter kundi pati na rin ng diksyunaryo ng mga atributo para sa bawat saklaw: font, kulay, espasyo sa pagitan ng mga linya, anino, at pagkakahanay. Ayon sa Apple Developer Documentation, ang Attributed String ay ang batayan para sa pagpapakita ng naka-format na teksto sa UILabel, UITextView, at UITextField. Ito ang karaniwang paraan ng pag-istilo ng teksto nang walang WebKit o mga third-party na library.

Mga pangunahing punto

  • NSAttributedString — hindi nababagong klase para sa pag-istilo ng teksto sa pamamagitan ng mga diksyunaryo ng atributo sa iOS
  • Mga Atributo ay kinabibilangan ng font, kulay, espasyo sa pagitan ng mga linya, anino, salungguhit, at pagkakahanay
  • NSMutableAttributedString — nababagong bersyon para sa dynamic na paglalapat ng mga estilo
  • addAttributes ay naglalapat ng diksyunaryo ng mga atributo sa isang saklaw, addAttribute — isang atributo
  • NSAttributedString ay ginagamit sa UILabel, UITextView, UITextField, at Core Text

Ano ang Attributed Text sa iOS?

NSAttributedString ay isang klase ng framework ng Foundation na kumakatawan sa isang string na may isang set ng mga pinangalanang atributo na nakatali sa mga saklaw ng karakter. Ang bawat atributo ay isang pares ng susi-halaga: ang susi ay tinukoy ng isang pare-pareho (NSFontAttributeName, NSForegroundColorAttributeName), at ang halaga ng isang kaukulang bagay (UIFont, UIColor). Ang mga atributo ay inilalapat sa isang saklaw ng karakter sa pamamagitan ng NSRange.

Ang klase ay available sa lahat ng platform ng Apple: iOS (2.0+), macOS, tvOS, watchOS. Ang NSAttributedString ay hindi nababago — pagkatapos ng paglikha, ang mga atributo nito ay naayos. Para sa dynamic na pagbabago, ginagamit ang NSMutableAttributedString, na nagmamana ng NSAttributedString at nagdaragdag ng mga pamamaraan na setAttributes, addAttributes, addAttribute, removeAttribute.

Pagkakaiba mula sa NSString

NSString ay isang simpleng string ng mga karakter na walang impormasyon ng estilo. Anumang teksto na ipinasa sa UILabel sa pamamagitan ng text ay ipinapakita gamit ang isang font, kulay, at sukat. Ang NSAttributedString na ipinasa sa pamamagitan ng attributedText ay nagpapahintulot sa bawat karakter na magkaroon ng sarili nitong hanay ng mga atributo. Ang UILabel, UITextView, at UITextField ay awtomatikong kumikilala ng NSAttributedString at nagre-render ng teksto ayon sa mga atributo.

Format ng imbakan

Sa loob, ang NSAttributedString ay nag-iimbak ng NSString na may teksto at isang array ng mga saklaw ng atributo. Ang bawat saklaw ay kinakatawan ng isang istraktura ng NSRange at isang diksyunaryo ng mga atributo. Sa pag-render, ang sistema ay dumadaan sa mga saklaw at naglalapat ng kaukulang mga atributo sa bawat bahagi. Ang kahusayan ay depende sa bilang ng mga paglipat ng atributo — ang madalas na pagbabago sa mga maiikling bahagi ay nagpapataas ng oras ng pag-render.

Mga Atributo ng NSAttributedString

Mga Atributo ng NSAttributedString ay mga pare-pareho na tinukoy sa UIKit (iOS) at AppKit (macOS), na ang bawat isa ay tumutugma sa isang tiyak na aspeto ng biswal na pag-format ng teksto. Lahat ng atributo ay mga string ng NSAttributedString.Key, at ang kanilang mga halaga ay mga bagay ng mga tiyak na klase. Ang mga atributo ay nahahati sa mga atributo ng karakter (nakakaapekto sa mga karakter) at mga atributo ng talata (nakakaapekto sa mga talata).

Ang mga atributo ng karakter ay kinabibilangan ng font (NSFontAttributeName), kulay ng teksto (NSForegroundColorAttributeName), kulay ng background (NSBackgroundColorAttributeName), salungguhit (NSUnderlineStyleAttributeName), guhit sa itaas (NSStrikethroughStyleAttributeName), anino (NSShadowAttributeName). Ang mga atributo ng talata ay itinatakda sa pamamagitan ng NSParagraphStyleAttributeName, na kumokontrol sa pagkakahanay, mga indentation, espasyo sa pagitan ng mga linya, at tabulasyon.

Mga Atributo ng link at interaktibidad

NSLinkAttributeName ay lumilikha ng isang naki-click na link sa teksto: ang halaga ay isang URL o string. Awtomatikong pinoproseso ng UITextView ang mga naturang link kung ang interaksyon ay naka-activate. Ang NSAttachmentAttributeName ay nagpapahintulot sa pag-embed ng NSTextAttachment — isang imahe sa loob ng teksto na ipinapakita bilang isang inline na elemento. Ito ay ginagamit para sa paglikha ng teksto na may mga icon, emoji, o custom na view sa loob ng string.

Mga pangunahing atributo ng pag-istilo

Ang bawat atributo ng NSAttributedString ay may mahigpit na naka-type na halaga. Tingnan natin ang mga pinakamadalas gamitin na atributo sa pag-develop ng iOS. Ang font ay itinatakda ng isang UIFont na bagay, kulay ng UIColor, espasyo sa pagitan ng mga linya sa pamamagitan ng NSMutableParagraphStyle, na nagpapahintulot sa pagsasaayos ng pagkakahanay, mga indentation, at mga espasyo sa isang bagay.

Susi ng AtributoUri ng HalagaLayunin
NSFontAttributeNameUIFontFont ng teksto
NSForegroundColorAttributeNameUIColorKulay ng teksto
NSBackgroundColorAttributeNameUIColorKulay ng background sa ilalim ng teksto
NSUnderlineStyleAttributeNameNSNumber (Int)Estilo ng salungguhit
NSParagraphStyleAttributeNameNSParagraphStyleMga setting ng talata
NSKernAttributeNameNSNumber (Float)Espasyo sa pagitan ng mga titik

NSParagraphStyle

NSParagraphStyle ay isang lalagyan para sa mga atributo ng talata: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight, at iba pa. Upang baguhin ang mga parameter na ito, isang NSMutableParagraphStyle ang ginagawa, ang mga nais na katangian ay isasaayos, at ang bagay ay ipinapasa bilang halaga ng atributo na NSParagraphStyleAttributeName. Ito ang tanging paraan upang kontrolin ang espasyo sa pagitan ng mga linya sa NSAttributedString.

Anino at mga epekto

NSShadow ay nagpapahintulot sa pagdagdag ng anino sa teksto: ang mga parameter na shadowOffset, shadowBlurRadius, shadowColor ay nagtatakda ng paglipat, paglabo, at kulay ng anino. Ang mga atributo ng salungguhit at guhit sa itaas ay tumatanggap ng mga kombinasyon ng mga estilo: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Para sa tumpak na kontrol sa kapal at kulay ng mga linya, gamitin ang NSUnderlineColorAttributeName at NSStrikethroughColorAttributeName.

Paano gamitin ang NSAttributedString sa code

Ang paglikha ng NSAttributedString sa Swift ay ginagawa sa pamamagitan ng initializer na may pagtukoy ng teksto at diksyunaryo ng mga atributo, o sa pamamagitan ng NSMutableAttributedString na may step-by-step na paglalapat ng mga estilo. Ang pangunahing diskarte — tukuyin ang isang diksyunaryo ng mga atributo para sa buong teksto, pagkatapos ay magdagdag o magbago ng mga atributo para sa mga indibidwal na saklaw.

Paglikha gamit ang mga atributo para sa buong teksto

Isang simpleng halimbawa — pagtatakda ng font, kulay, at pagkakahanay para sa buong string. Ang diksyunaryo ng mga atributo ay ipinapasa sa initializer ng NSAttributedString. Ang mga susi ng diksyunaryo ay mga pare-pareho ng NSAttributedString.Key, ang mga halaga ay mga kaukulang bagay ng UIKit. Ito ang pangunahing variant kapag ang buong teksto ay na-format nang pare-pareho.

swift
let attributes: [NSAttributedString.Key: Any] = [
    .font: UIFont.systemFont(ofSize: 16),
    .foregroundColor: UIColor.darkGray,
    .paragraphStyle: let style = NSMutableParagraphStyle()
    style.alignment = .center
    style.lineSpacing = 4
    return style
]
let attributedString = NSAttributedString(
    string: "Hello world",
    attributes: attributes
)
label.attributedText = attributedString

Ang teksto ay ipapakita gamit ang font na systemFont 16, kulay na dark gray, pagkakahanay na centered, at espasyo sa pagitan ng mga linya na 4pt. Ang diskarteng ito ay maginhawa para sa mga static na header at button.

Paglalapat sa saklaw

NSMutableAttributedString ay nagpapahintulot sa paglalapat ng iba't ibang estilo sa iba't ibang bahagi ng teksto. Ang pamamaraang addAttribute ay nagdaragdag ng isang atributo sa isang saklaw, addAttributes — isang diksyunaryo ng mga atributo. Ang pamamaraang setAttributes ay pinapalitan ang lahat ng atributo ng saklaw ng mga bago. Ito ang pangunahing kasangkapan para sa paglikha ng teksto na may mga highlight.

swift
let text = "Price: 1999 rubles"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.foregroundColor,
    value: UIColor.green, range: NSRange(location: 6, length: 4))
attributed.addAttribute(.font,
    value: UIFont.boldSystemFont(ofSize: 20), range: NSRange(location: 6, length: 4))
label.attributedText = attributed

Ang salitang “1999” ay magiging berde at naka-bold, ang natitirang teksto — standard. Ang NSRange ay kinakalkula nang manu-mano — mahalaga na tama ang pagbilang ng haba sa mga karakter, lalo na kapag nagtatrabaho sa mga emoji at pinagsamang mga karakter ng Unicode.

Mga dynamic na estilo gamit ang NSMutableAttributedString

NSMutableAttributedString ay nagbibigay ng mga pamamaraan para sa dynamic na pagbabago ng teksto at mga atributo: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Ito ay nagpapahintulot sa pagbuo ng teksto mula sa iba't ibang mga mapagkukunan, pagsasama-sama ng mga estilo, at pagtugon sa mga kaganapan ng interface.

Hindi tulad ng hindi nababagong NSAttributedString, ang mutable na bersyon ay sumusuporta sa pagbabago ng nilalaman nang hindi lumilikha ng isang bagong bagay. Ito ay mahalaga para sa mga editor ng teksto, chat, at mga form, kung saan ang user ay maaaring mag-edit ng teksto at ang mga estilo ay dapat mapanatili.

Pagsasama-sama ng mga estilo sa chat

Sa mga application ng pagmemensahe, ang bawat mensahe ay naglalaman ng pangalan ng user (naka-bold na font), teksto ng mensahe (normal), oras (kulay na gray). Ang NSMutableAttributedString ay nagpapahintulot sa pagbuo ng naturang string nang sabay-sabay, pagdaragdag ng mga bahagi sa tamang pagkakasunod-sunod na may kaukulang mga atributo.

swift
let result = NSMutableAttributedString()
let name = NSAttributedString(string: "Anna: ",
    attributes: [.font: UIFont.boldSystemFont(ofSize: 15)])
let message = NSAttributedString(string: "Hello, how are you?",
    attributes: [.font: UIFont.systemFont(ofSize: 15)])
let time = NSAttributedString(string: " 12:30",
    attributes: [.foregroundColor: UIColor.gray])
result.append(name)
result.append(message)
result.append(time)
label.attributedText = result

Ang resulta — isang string na may tatlong bahagi na may estilo. Ang Append ay awtomatikong kinakalkula ang NSRange nang tama, ang mga posisyon ay hindi kailangang kalkulahin nang manu-mano. Ang diskarteng ito ay scalable sa anumang bilang ng mga fragment.

Pag-ulit sa mga atributo

Ang pamamaraang enumerateAttributes(in:options:using:) ay dumadaan sa lahat ng saklaw ng atributo sa tinukoy na agwat. Ito ay kapaki-pakinabang para sa pagsusuri ng pag-format: paghahanap ng lahat ng link, pagbabago ng kulay ng ilang mga atributo, o pag-export ng teksto sa HTML. Sa closure, ang diksyunaryo ng mga atributo at ang NSRange ng kasalukuyang bahagi ay ipinapasa.

Attributed Text sa mga bahagi ng UIKit

Lahat ng pangunahing bahagi ng UI para sa pagpapakita ng teksto sa UIKit ay sumusuporta sa NSAttributedString sa pamamagitan ng property na attributedText. Ang UILabel ay nagpapakita ng static na naka-istilong teksto, ang UITextView ay sumusuporta sa pag-edit at mga link, ang UITextField ay tumatanggap ng mga atributo nang hiwalay para sa placeholder at inilagay na teksto.

UILabel na may attributedText

UILabel ay ang pinakamagaan na bahagi para sa pagpapakita ng naka-istilong teksto. Sinusuportahan nito ang lahat ng atributo ng karakter, ngunit hindi nagpoproseso ng mga naki-click na link nang awtomatiko (para doon kinakailangan ang UITextView). Ang UILabel ay perpekto para sa mga header, label, at maiikling teksto na may pag-format.

UITextView na may mga link

UITextView ay nagpoproseso ng NSLinkAttributeName at nagpapakita ng mga link bilang mga interaktibong elemento. Upang i-activate ang functionality na ito, itakda ang isSelectable = true at isEditable = false. Kapag nag-click sa isang link, ang delegado ay tumatanggap ng tawag na textView(_:shouldInteractWith:in:interaction:). Ang UITextView ay sumusuporta rin sa NSTextAttachment para sa mga imahe sa loob ng teksto.

swift
let text = "Details on developer.apple.com"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.link,
    value: URL(string: "https://developer.apple.com")!,
    range: NSRange(location: 0, length: text.count))
textView.attributedText = attributed
textView.isSelectable = true
textView.isEditable = false

Pagkatapos ng pagsasaayos ng isSelectable at isEditable, ang lugar ng teksto ay kumikilos tulad ng isang static na bloke ng teksto, ngunit ang mga link ay nananatiling aktibo. Ang delegado na UITextViewDelegate ay namamahala sa pag-uugali kapag nag-click.

Pagsasama sa Core Text

Core Text ay isang mababang antas na framework ng Apple para sa pag-render ng teksto na direktang gumagana sa NSAttributedString. Hindi tulad ng UIKit, ang Core Text ay hindi gumagamit ng NSAttributedString nang direkta bilang isang bagay na ipapakita, kundi kino-convert ito sa CTFramesetter, pagkatapos ay sa CTFrame, at nagre-render sa isang konteksto ng Core Graphics. Ito ay nagbibigay ng buong kontrol sa paglalagay ng mga linya at glyph.

Ang paggamit ng Core Text ay makatwiran para sa custom na layout ng teksto: mga column, pagdaloy sa paligid ng mga imahe, pag-ikot ng teksto, hindi karaniwang pagputol ng linya. Ang NSMutableParagraphStyle ng Core Text ay may kasamang mga atributo na wala sa UIKit: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode na may mga karagdagang mode.

Conversion sa pagitan ng UIKit at Core Text

NSAttributedString ay walang putol na inililipat sa pagitan ng UIKit at Core Text, dahil ang parehong framework ay gumagana sa parehong uri. Ang mga atributo ng UIKit (NSFontAttributeName, NSForegroundColorAttributeName) ay awtomatikong kinikilala ng Core Text at vice versa — ang mga atributo ng Core Text (kCTFontAttributeName) ay binabasa ng UIKit. Ito ay nagpapahintulot sa paggamit ng UIKit para sa mga simpleng gawain at Core Text para sa custom na pag-render sa parehong bagay na NSAttributedString.

Mga madalas itanong

Paano naiiba ang NSAttributedString sa NSString?

NSString ay nag-iimbak lamang ng teksto nang walang impormasyon ng estilo. Ang NSAttributedString ay nagdaragdag ng teksto ng isang diksyunaryo ng mga atributo para sa bawat saklaw ng karakter. Kapag ipinasa sa UILabel sa pamamagitan ng property na text, ang NSString ay ipinapakita bilang plain text. Kapag ipinasa ang NSAttributedString sa pamamagitan ng property na attributedText, ang lahat ng atributo ay inilalapat: iba't ibang font, kulay, at espasyo sa isang string.

Paano magdagdag ng maraming atributo sa isang saklaw?

Gamitin ang pamamaraang addAttributes(_:range:) na may diksyunaryo ng mga atributo: addAttributes([.font: font, .foregroundColor: color], range: range). Upang magdagdag o magbago ng isang atributo, gamitin ang addAttribute(_:value:range:). Ang pamamaraang setAttributes ay pinapalitan ang lahat ng umiiral na atributo sa saklaw ng mga bago.

Paano baguhin ang espasyo sa pagitan ng mga linya sa NSAttributedString?

Gumawa ng NSMutableParagraphStyle, itakda ang property na lineSpacing, pagkatapos ay ipasa ito bilang halaga ng atributo na NSParagraphStyleAttributeName. Para sa buong kontrol, available din ang minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode, at alignment. Ang ParagraphStyle ay ang tanging paraan upang kontrolin ang espasyo sa pagitan ng mga linya.

Gumagana ba ang mga atributo sa SwiftUI?

Oo, sinusuportahan ng SwiftUI ang NSAttributedString sa pamamagitan ng Text(attributedString:) sa iOS 15+. Sa mas lumang mga bersyon, gamitin ang UIViewRepresentable na may UILabel o UITextView. Ang SwiftUI ay nagbibigay din ng sarili nitong uri na AttributedString (SwiftUI, hindi Foundation) para sa deklaratibong pag-format na may syntax na katulad ng Markdown.

Paano kalkulahin ang laki ng NSAttributedString?

Gamitin ang pamamaraang boundingRect(with:options:context:), na nagbabalik ng CGRect na kinakailangan para sa pagpapakita ng string na may tinukoy na mga atributo. Ang parameter na options: [.usesLineFragmentOrigin, .usesFontLeading] ay isinasaalang-alang ang mga espasyo sa pagitan ng mga linya at mga metriko ng font. Para sa UILabel na may limitadong bilang ng mga linya, gamitin ang sizeThatFits.

Buod

  • NSAttributedString — klase ng Foundation para sa pag-istilo ng teksto sa pamamagitan ng mga diksyunaryo ng atributo sa iOS
  • Mga Atributo ay kinabibilangan ng font (UIFont), kulay (UIColor), salungguhit, anino, at mga setting ng talata
  • NSMutableAttributedString — dynamic na bersyon na may pagdaragdag at pag-alis ng mga atributo
  • addAttributes(_:range:) ay naglalapat ng diksyunaryo ng mga atributo sa isang saklaw ng karakter
  • NSParagraphStyle ay kumokontrol sa espasyo sa pagitan ng mga linya, pagkakahanay, at mga indentation
  • UILabel, UITextView, UITextField ay sumusuporta sa attributedText para sa pagpapakita ng mga estilo
  • Core Text ay gumagamit ng parehong NSAttributedString para sa mababang antas na pag-render

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din