Attributed Text: nədir, atribut növləri və stilləşdirmə

Müəllif: IT Sectr Dərc olunub: 2026-07-23 Oxuma vaxtı: 8 dəq

Attributed Text — NSAttributedString və NSMutableAttributedString sinifləri ilə təmsil olunan iOS SDK mexanizmidir və bir mətn sətrinin müxtəlif hissələrinə çoxsaylı stillər tətbiq etməyə imkan verir. Adi NSString-dən fərqli olaraq, Attributed String yalnız simvolları deyil, həm də hər bir diapazon üçün atributlar lüğətini saxlayır: şrift, rəng, sətirarası boşluq, kölgə və düzləndirmə. Apple Developer Documentation-ya görə, Attributed String UILabel, UITextView və UITextField-də formatlaşdırılmış mətnin göstərilməsi üçün əsasdır. Bu, WebKit və ya üçüncü tərəf kitabxanaları olmadan mətn stilləşdirməsinin standart üsuludur.

Əsas məqamlar

  • NSAttributedString — iOS-da atributlar lüğətləri vasitəsilə mətn stilləşdirməsi üçün dəyişməz sinif
  • Atributlara şrift, rəng, sətirarası boşluq, kölgə, altından xətt çəkmə və düzləndirmə daxildir
  • NSMutableAttributedString — stillərin dinamik tətbiqi üçün dəyişən versiya
  • addAttributes atributlar lüğətini diapazona tətbiq edir, addAttribute — bir atribut
  • NSAttributedString UILabel, UITextView, UITextField və Core Text-də istifadə olunur

iOS-da Attributed Text nədir?

NSAttributedString — simvol diapazonlarına bağlanmış adlandırılmış atributlar dəsti ilə sətri təmsil edən Foundation framework sinfidir. Hər bir atribut açar-dəyər cütüdür: açar sabitlə müəyyən edilir (NSFontAttributeName, NSForegroundColorAttributeName), dəyər isə müvafiq obyektlə (UIFont, UIColor). Atributlar NSRange vasitəsilə simvol diapazonuna tətbiq edilir.

Sinif bütün Apple platformalarında mövcuddur: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString dəyişməzdir — yaradıldıqdan sonra atributları sabit qalır. Dinamik dəyişiklik üçün NSAttributedString-dən miras alan və setAttributes, addAttributes, addAttribute, removeAttribute metodlarını əlavə edən NSMutableAttributedString istifadə olunur.

NSString-dən fərqi

NSString — stilləşdirmə məlumatı olmayan sadə simvol sətri. UILabel-ə text vasitəsilə ötürülən istənilən mətn bir şrift, rəng və ölçüdə göstərilir. attributedText vasitəsilə ötürülən NSAttributedString hər simvola öz atributlar dəstinə malik olmağa imkan verir. UILabel, UITextView və UITextField avtomatik olaraq NSAttributedString-i tanıyır və mətni atributlara uyğun göstərir.

Saxlama formatı

Daxilən NSAttributedString mətnlə birlikdə NSString və atribut diapazonları massivi saxlayır. Hər bir diapazon NSRange strukturu və atributlar lüğəti ilə təmsil olunur. Göstərmə zamanı sistem diapazonlar üzrə keçir və hər bir hissəyə müvafiq atributları tətbiq edir. Səmərəlilik atribut keçidlərinin sayından asılıdır — qısa hissələrdə tez-tez dəyişmə göstərmə vaxtını artırır.

NSAttributedString atributları

NSAttributedString atributları — UIKit (iOS) və AppKit-də (macOS) müəyyən edilmiş sabitlərdir, hər biri mətnin vizual formatlaşdırılmasının müəyyən aspektinə uyğundur. Bütün atributlar NSAttributedString.Key sətirləridir, dəyərləri isə müəyyən siniflərin obyektləridir. Atributlar simvol (simvollara təsir edir) və abzas (abzaslara təsir edir) olaraq bölünür.

Simvol atributlarına şrift (NSFontAttributeName), mətn rəngi (NSForegroundColorAttributeName), fon rəngi (NSBackgroundColorAttributeName), altından xətt çəkmə (NSUnderlineStyleAttributeName), üstündən xətt çəkmə (NSStrikethroughStyleAttributeName), kölgə (NSShadowAttributeName) daxildir. Abzas atributları NSParagraphStyleAttributeName vasitəsilə təyin edilir və düzləndirmə, abzaslar, sətirarası boşluq və tabulyasiyanı idarə edir.

Link və interaktivlik atributları

NSLinkAttributeName mətndə kliklənə bilən link yaradır: dəyər URL və ya sətirdir. UITextView interaktivlik aktiv olduqda belə linkləri avtomatik idarə edir. NSAttachmentAttributeName mətn daxilində NSTextAttachment — inline element kimi göstərilən təsviri yerləşdirməyə imkan verir. Bu, sətir daxilində nişanlar, emoji və ya xüsusi görünüşlər olan mətnlər yaratmaq üçün istifadə olunur.

Əsas stilləşdirmə atributları

Hər bir NSAttributedString atributunun ciddi tipli dəyəri var. iOS inkişafında ən çox istifadə olunan atributlara baxaq. Şrift UIFont obyekti ilə, rəng UIColor ilə, sətirarası boşluq isə düzləndirmə, abzaslar və boşluqları bir obyektdə konfiqurasiya etməyə imkan verən NSMutableParagraphStyle vasitəsilə təyin edilir.

Atribut açarıDəyər tipiTəyinat
NSFontAttributeNameUIFontMətn şrifti
NSForegroundColorAttributeNameUIColorMətn rəngi
NSBackgroundColorAttributeNameUIColorMətn altında fon rəngi
NSUnderlineStyleAttributeNameNSNumber (Int)Altından xətt çəkmə stili
NSParagraphStyleAttributeNameNSParagraphStyleAbzas parametrləri
NSKernAttributeNameNSNumber (Float)Hərflərarası boşluq

NSParagraphStyle

NSParagraphStyle — abzas atributları üçün konteyner: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight və s. Bu parametrləri dəyişmək üçün NSMutableParagraphStyle yaradılır, lazımi xüsusiyyətlər konfiqurasiya edilir və obyekt NSParagraphStyleAttributeName atributunun dəyəri kimi ötürülür. Bu, NSAttributedString-də sətirarası boşluğu idarə etməyin yeganə üsuludur.

Kölgə və effektlər

NSShadow mətnə kölgə əlavə etməyə imkan verir: shadowOffset, shadowBlurRadius, shadowColor parametrləri kölgənin yerdəyişməsini, bulanıqlığını və rəngini təyin edir. Altından və üstündən xətt çəkmə atributları stillərin kombinasiyalarını qəbul edir: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Xətlərin qalınlığı və rəngini dəqiq idarə etmək üçün NSUnderlineColorAttributeName və NSStrikethroughColorAttributeName istifadə olunur.

Kodda NSAttributedString-dən necə istifadə etməli

Swift-də NSAttributedString yaratmaq mətn və atributlar lüğəti ilə initləşdirici vasitəsilə və ya NSMutableAttributedString ilə addım-addım stillər tətbiq etməklə həyata keçirilir. Əsas yanaşma — bütün mətn üçün atributlar lüğəti təyin etmək, sonra ayrı-ayrı diapazonlar üçün atributlar əlavə etmək və ya dəyişməkdir.

Bütün mətn üçün atributlarla yaratma

Sadə nümunə — bütün sətir üçün şrift, rəng və düzləndirmə təyin etmək. Atributlar lüğəti NSAttributedString initləşdiricisinə ötürülür. Lüğət açarları NSAttributedString.Key sabitləri, dəyərlər isə müvafiq UIKit obyektləridir. Bu, bütün mətnin vahid formatlaşdırıldığı əsas variantdır.

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

Mətn systemFont 16 şrifti, tünd boz rəng, mərkəzə düzləndirmə və 4pt sətirarası boşluqla göstəriləcək. Bu yanaşma statik başlıqlar və düymələr üçün əlverişlidir.

Diapazona tətbiq

NSMutableAttributedString mətnin müxtəlif hissələrinə fərqli stillər tətbiq etməyə imkan verir. addAttribute metodu diapazona bir atribut əlavə edir, addAttributes — atributlar lüğəti. setAttributes metodu diapazonun bütün atributlarını yeniləri ilə əvəz edir. Bu, vurğulamalarla mətn yaratmaq üçün əsas vasitədir.

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

“1999” sözü yaşıl və qalın olacaq, qalan mətn — standart. NSRange əl ilə hesablanır — simvollarda uzunluğu düzgün saymaq vacibdir, xüsusən emoji və mürəkkəb Unicode simvolları ilə işləyərkən.

NSMutableAttributedString ilə dinamik stillər

NSMutableAttributedString mətn və atributların dinamik dəyişdirilməsi üçün metodlar təqdim edir: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Bu, müxtəlif mənbələrdən mətn qurmağa, stilləri birləşdirməyə və interfeys hadisələrinə reaksiya verməyə imkan verir.

Dəyişməz NSAttributedString-dən fərqli olaraq, mutable versiyası yeni obyekt yaratmadan məzmunun dəyişdirilməsini dəstəkləyir. Bu, mətn redaktorları, çatlar və formalar üçün vacibdir, burada istifadəçi mətni redaktə edə bilər və stillər saxlanmalıdır.

Çatda stillərin birləşdirilməsi

Mesajlaşma proqramlarında hər bir mesaj istifadəçi adı (qalın şrift), mesaj mətni (adi), vaxt (boz rəng) ehtiva edir. NSMutableAttributedString belə bir sətri bir dəfəyə qurmağa, hissələri müvafiq atributlarla lazımi ardıcıllıqda əlavə etməyə imkan verir.

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

Nəticə — üç stilli hissəsi olan bir sətir. Append avtomatik olaraq NSRange-i düzgün hesablayır, mövqeləri əl ilə hesablamaq lazım deyil. Bu yanaşma istənilən sayda fraqment üçün miqyaslanır.

Atributlar üzrə iterasiya

enumerateAttributes(in:options:using:) metodu göstərilən intervalda bütün atribut diapazonları üzrə keçir. Bu, formatlaşdırmanı təhlil etmək üçün faydalıdır: bütün linkləri tapmaq, müəyyən atributların rəngini dəyişmək və ya mətni HTML-ə ixrac etmək. Zamanda atributlar lüğəti və cari hissənin NSRange-i ötürülür.

UIKit komponentlərində Attributed Text

UIKit-də mətn göstərmək üçün bütün əsas UI komponentləri attributedText xassəsi vasitəsilə NSAttributedString-i dəstəkləyir. UILabel statik stilləşdirilmiş mətn göstərir, UITextView redaktə və linkləri dəstəkləyir, UITextField placeholder və daxil edilmiş mətn üçün ayrıca atributlar qəbul edir.

UILabel attributedText ilə

UILabel — stilləşdirilmiş mətn göstərmək üçün ən yüngül komponentdir. Bütün simvol atributlarını dəstəkləyir, lakin kliklənə bilən linkləri avtomatik idarə etmir (bunun üçün UITextView tələb olunur). UILabel başlıqlar, etiketlər və formatlaşdırma ilə qısa mətnlər üçün idealdır.

Linklərlə UITextView

UITextView NSLinkAttributeName-i idarə edir və linkləri interaktiv elementlər kimi göstərir. Bu funksionallığı aktiv etmək üçün isSelectable = true və isEditable = false təyin edin. Linkə klik edildikdə, delegate textView(_:shouldInteractWith:in:interaction:) çağırışını alır. UITextView həmçinin mətn daxilində təsvirlər üçün NSTextAttachment-i dəstəkləyir.

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

isSelectableisEditable konfiqurasiya edildikdən sonra mətn sahəsi statik mətn bloku kimi davranır, lakin linklər aktiv qalır. UITextViewDelegate delegate klik zamanı davranışı idarə edir.

Core Text ilə inteqrasiya

Core Text — birbaşa NSAttributedString ilə işləyən Apple-ın aşağısəviyyəli mətn renderinq framework-üdür. UIKit-dən fərqli olaraq, Core Text NSAttributedString-i birbaşa göstəriləcək obyekt kimi istifadə etmir, onu CTFramesetter-ə, sonra CTFrame-ə çevirir və Core Graphics kontekstində göstərir. Bu, sətirlərin və gliflərin yerləşdirilməsi üzərində tam nəzarət verir.

Core Text-dən istifadə xüsusi mətn layoutları üçün əsaslandırılır: sütunlar, təsvirlərin ətrafına axın, mətnin fırlanması, qeyri-standart sətir qırılmaları. Core Text-in NSMutableParagraphStyle-ı UIKit-də olmayan atributları ehtiva edir: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode əlavə rejimlərlə.

UIKit və Core Text arasında konvertasiya

NSAttributedString UIKit və Core Text arasında problemsiz ötürülür, çünki hər iki framework eyni tiplə işləyir. UIKit atributları (NSFontAttributeName, NSForegroundColorAttributeName) Core Text tərəfindən avtomatik tanınır və əksinə — Core Text atributları (kCTFontAttributeName) UIKit tərəfindən oxunur. Bu, eyni NSAttributedString obyektində sadə tapşırıqlar üçün UIKit-dən və xüsusi renderinq üçün Core Text-dən istifadə etməyə imkan verir.

Tez-tez verilən suallar

NSAttributedString NSString-dən nə ilə fərqlənir?

NSString stilləşdirmə məlumatı olmadan yalnız mətni saxlayır. NSAttributedString mətni hər bir simvol diapazonu üçün atributlar lüğəti ilə tamamlayır. UILabel-ə text xassəsi vasitəsilə ötürüldükdə NSString düz mətn kimi göstərilir. NSAttributedString attributedText xassəsi vasitəsilə ötürüldükdə bütün atributlar tətbiq edilir: bir sətirdə müxtəlif şriftlər, rənglər və boşluqlar.

Bir diapazona bir neçə atributu necə əlavə etməli?

addAttributes(_:range:) metodundan atributlar lüğəti ilə istifadə edin: addAttributes([.font: font, .foregroundColor: color], range: range). Bir atribut əlavə etmək və ya dəyişmək üçün addAttribute(_:value:range:) istifadə edin. setAttributes metodu diapazondakı bütün mövcud atributları yeniləri ilə əvəz edir.

NSAttributedString-də sətirarası boşluğu necə dəyişməli?

NSMutableParagraphStyle yaradın, lineSpacing xassəsini təyin edin, sonra onu NSParagraphStyleAttributeName atributunun dəyəri kimi ötürün. Tam nəzarət üçün minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode və alignment da mövcuddur. ParagraphStyle sətirarası boşluğu idarə etməyin yeganə üsuludur.

Atributlar SwiftUI-də işləyirmi?

Bəli, SwiftUI iOS 15+-də Text(attributedString:) vasitəsilə NSAttributedString-i dəstəkləyir. Köhnə versiyalarda UILabel və ya UITextView ilə UIViewRepresentable istifadə edin. SwiftUI həmçinin Markdown bənzəri sintaksis ilə deklarativ formatlaşdırma üçün öz AttributedString (SwiftUI, Foundation deyil) tipini təqdim edir.

NSAttributedString-in ölçüsünü necə hesablamaq olar?

boundingRect(with:options:context:) metodundan istifadə edin, o, verilmiş atributlarla sətri göstərmək üçün tələb olunan CGRect-i qaytarır. options: [.usesLineFragmentOrigin, .usesFontLeading] parametri sətirarası boşluqları və şrift metrikalarını nəzərə alır. Məhdud sayda sətirli UILabel üçün sizeThatFits istifadə edin.

Xülasə

  • NSAttributedString — iOS-da atributlar lüğətləri vasitəsilə mətn stilləşdirməsi üçün Foundation sinfi
  • Atributlara şrift (UIFont), rəng (UIColor), altından xətt çəkmə, kölgə və abzas parametrləri daxildir
  • NSMutableAttributedString — atributların əlavə edilməsi və silinməsi ilə dinamik versiya
  • addAttributes(_:range:) atributlar lüğətini simvol diapazonuna tətbiq edir
  • NSParagraphStyle sətirarası boşluq, düzləndirmə və abzasları idarə edir
  • UILabel, UITextView, UITextField stillərin göstərilməsi üçün attributedText-i dəstəkləyir
  • Core Text aşağısəviyyəli renderinq üçün eyni NSAttributedString-dən istifadə edir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun