NSAttributedString — bu nədir, mətn formatlaşdırması və iOS-da atributlar

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

NSAttributedString — iOS SDK-da Foundation framework-dən olan, ayrı-ayrı simvollara və ya mətn diapazonlarına tətbiq edilən formatlaşdırma atributları dəsti ilə sətri təmsil edən sinifdir. Adi NSString-dən fərqli olaraq, NSAttributedString təkcə Unicode simvollarını deyil, həm də sətrin hər seqmenti üçün atributlar lüğətini (şrift, rəng, simvollararası interval, düzləndirmə) saxlayır. Apple Developer Documentation (2026) məlumatına görə, NSAttributedString iOS-un bütün UI-komponentlərində formatlaşdırılmış mətnin göstərilməsi üçün əsasdır.

Əsas məqamlar

  • NSAttributedString — atributları olan dəyişməz sətir, burada hər simvola və ya diapazona NSAttributedStringKey atributlar lüğəti uyğun gəlir
  • NSMutableAttributedString — runtime-da atributların dəyişdirilməsi üçün addAttribute, setAttributes, replaceCharacters metodları ilə dəyişən versiya
  • Əsas atributlar: .font, .foregroundColor, .paragraphStyle, .kern, .underlineStyle, .strikethroughStyle, .link, .backgroundColor
  • NSMutableParagraphStyle — düzləndirmə, sətirarası interval, abzaslar və mətn istiqamətini təyin etmək üçün köməkçi obyekt
  • UILabel, UITextView, UITextField atributlaşdırılmış sətirləri göstərmək üçün attributedText-i dəstəkləyir

NSAttributedString nədir?

NSAttributedString — formatlaşdırılmış mətnlə işləmək üçün iOS/macOS-un əsas sinfidir. O, NSString-in imkanlarını genişləndirərək sətrə atributlar — açar-dəyər cütləri lüğəti əlavə edir, burada açar NSAttributedStringKey sabitidir (məsələn, .font, .foregroundColor), dəyər isə müvafiq obyektdir (UIFont, UIColor). Sətirdəki hər simvol öz atribut dəstinə malik ola bilər ki, bu da bir sətirdə qarışıq formatlaşdırma həyata keçirməyə imkan verir.

NSAttributedString arxitekturası atribut diapazonları (attribute runs) konsepsiyasına əsaslanır. 0..5 simvol diapazonu üçün .font = UIFont.boldSystemFont(ofSize: 16) atributunu təyin etsəniz, bu diapazonun bütün simvolları qalın şriftlə göstəriləcək. Qalan simvollar başqa şriftə malik ola bilər və ya heç bir atributa malik olmaya bilər. Atributlaşdırılmış sətir göstərildikdə UIKit sistemi müxtəlif diapazonlardan xüsusiyyətləri birləşdirir və mətni vahid şəkildə render edir.

NSAttributedString dəyişməzdir — yaradıldıqdan sonra onun atributları və məzmunu dəyişdirilə bilməz. Dəyişiklik üçün NSMutableAttributedString alt sinfi mövcuddur, o, istənilən diapazonlarda atributları əlavə etmək, silmək və dəyişdirmək üçün metodlar təqdim edir. Bu fərq çoxaxlılıq üçün vacibdir: dəyişməz NSAttributedString thread-safe-dir, NSMutableAttributedString isə yox.

Mətn formatlaşdırmasının əsas atributları

NSAttributedString NSAttributedStringKey-də təyin edilmiş təxminən 40 standart atributu dəstəkləyir. Hər bir atribut mətnin görünüşünün müəyyən aspektinə təsir edir: şrift, rəng, mövqe, altından xətt, kölgə, simvollararası interval, abzas stili və hiperlinklər. Atribut təyin etmək üçün NSAttributedStringKey sabitindən istifadə olunur və ona müvafiq tipli obyekt təyin edilir.

Atribut açarıDəyər tipiTəyinat
.fontUIFontMətnin şrifti və ölçüsü
.foregroundColorUIColorMətnin rəngi
.backgroundColorUIColorMətn altında fon rəngi
.paragraphStyleNSParagraphStyleDüzləndirmə, sətirarası interval, abzaslar
.kernNSNumber (Float)Simvollararası interval (kerning)
.underlineStyleNSUnderlineStyle (Int)Altından xətt çəkmə stili (single, double, thick, pattern)
.strikethroughStyleNSUnderlineStyle (Int)Üstündən xətt çəkmə stili
.linkNSURLİnteraktiv hiperlink üçün URL
.shadowNSShadowOffset, blurRadius və rənglə mətn kölgəsi
.baselineOffsetNSNumber (Float)Mətnin baza xəttinə nisbətən yerdəyişməsi

NSParagraphStyle — abzas formatlaşdırması

NSMutableParagraphStyle — abzasın vizual xüsusiyyətlərini idarə edən obyekt: düzləndirmə (.alignment: .left, .center, .right, .justified), sətirarası interval (.lineSpacing), abzaslararası məsafə (.paragraphSpacing), birinci sətrin abzası (.firstLineHeadIndent), sol və sağ abzaslar (.headIndent, .tailIndent) və mətn istiqaməti (.baseWritingDirection). ParagraphStyle, bütün abzas üçün eyni formatlaşdırma tələb olunarsa, yeni sətir simvollarını əhatə edən diapazona tətbiq edilir.

Kodda NSAttributedString necə yaradılır

Yaradılması NSAttributedString, sətri və atributlar lüğətini qəbul edən inizializator vasitəsilə həyata keçirilir. Atributlar bütün sətrə tətbiq edilir. Qarışıq formatlaşdırma (sətrin müxtəlif hissələrində fərqli atributlar) üçün NSMutableAttributedString istifadə olunur, sonra konkret diapazonlara atributlar əlavə edilir. Objective-C NSAttributedStringKey: UIFont lüğətindən, Swift isə tip-təhlükəsiz [NSAttributedString.Key: Any] lüğətindən istifadə edir.

swift
let plainText = "Hello, Swift!"

// Create with uniform attributes for the entire string
let attributes: [NSAttributedString.Key: Any] = [
    NSAttributedString.Key.font:
        UIFont.systemFont(ofSize: 18),
    NSAttributedString.Key.foregroundColor:
        UIColor.darkText,
    NSAttributedString.Key.kern: 1.5
]

let attributedString =
    NSAttributedString(string: plainText,
                        attributes: attributes)

NSMutableParagraphStyle ilə yaradılması

Nümunə abzas formatlaşdırmasını NSMutableParagraphStyle vasitəsilə göstərir. Mərkəzə düzləndirmə, 8 punkt sətirarası interval, abzasdan sonra 12 punkt boşluq təyin edilir. ParagraphStyle .paragraphStyle açarı altında atributlar lüğətinə əlavə edilir. NSAttributedString ötürülən paragraphStyle-i kopyalayır, buna görə də sətir yaradıldıqdan sonra onu dəyişmək artıq yaradılmış sətrə təsir etmir.

swift
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.center
paragraphStyle.lineSpacing = 8.0
paragraphStyle.paragraphSpacing = 12.0
paragraphStyle.firstLineHeadIndent = 20.0

let attributed = NSAttributedString(
    string: "Centered paragraph with spacing",
    attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])

NSMutableAttributedString və atributların dəyişdirilməsi

NSMutableAttributedString — yaradıldıqdan sonra məzmunu və atributları dəyişməyə imkan verən NSAttributedString alt sinfidir. Əsas metodlar: diapazona bir atribut əlavə etmək üçün addAttribute(_:value:range:); bir neçə atribut əlavə etmək üçün addAttributes(_:range:); diapazondakı bütün atributları əvəz etmək üçün setAttributes(_:range:); atributu silmək üçün removeAttribute(_:range:); mətni əvəz etmək üçün replaceCharacters(in:with:).

addAttributeaddAttributes mövcud atributlara əlavə edir, artıq təyin edilmişləri silmir. Diapazonda eyni açarlı atribut artıq varsa, onun dəyəri əvəz edilir. setAttributes diapazon üçün atributlar lüğətini tamamilə əvəz edir — əvvəllər təyin edilmiş bütün atributlar silinir. Bu, bir sətrin ardıcıl formatlaşdırılması zamanı vacibdir: addAttributes daha təhlükəsizdir, çünki artıq təyin edilmiş şriftləri və rəngləri sıfırlamır.

Diapazonlar (NSRange) NSRange(location: 0, length: 5) strukturu ilə təyin edilir. location — başlanğıc indeks (0-əsaslı), length — simvolların sayı. Diapazon sətrin hüdudlarından kənara çıxarsa, NSMutableAttributedString NSRangeException istisnası yaradır. Diapazonlarla təhlükəsiz işləmək üçün Foundation-dan NSIntersectionRangeNSUnionRange kimi NSRange metodlarından istifadə olunur.

swift
let attributed = NSMutableAttributedString(
    string: "Bold and red text here")

// Apply bold font to first 9 characters
let boldRange = NSRange(location: 0, length: 9)
attributed.addAttribute(
    NSAttributedString.Key.font,
    value: UIFont.boldSystemFont(ofSize: 16),
    range: boldRange)

// Apply red color to characters 13-16 ("text")
let redRange = NSRange(location: 13, length: 4)
attributed.addAttribute(
    NSAttributedString.Key.foregroundColor,
    value: UIColor.red,
    range: redRange)

// Apply underline to the entire string
let fullRange = NSRange(location: 0,
                       length: attributed.length)
attributed.addAttribute(
    NSAttributedString.Key.underlineStyle,
    value: NSUnderlineStyle.single.rawValue,
    range: fullRange)

UILabel-də atributlaşdırılmış sətrin göstərilməsi nümunəsi

Ən geniş yayılmış üsul NSAttributedString-in göstərilməsi — onu UILabel-in attributedText xassəsinə təyin etməkdir. text xassəsindən fərqli olaraq, attributedText render etmək üçün atributlardan istifadə edir, qarışıq formatlaşdırmanı dəstəkləyir. Vacibdir: attributedText təyin edilərsə, UILabel font, textColor, textAlignment xassələrini nəzərə almır — bütün vizual xüsusiyyətlər NSAttributedString atributlarından götürülür.

swift
let label = UILabel()
label.numberOfLines = 0

let fullText = NSMutableAttributedString(
    string: "Price: $24.99 per month")

// Format "Price:" label with bold font
let priceLabelRange = NSRange(
    location: 0, length: 6)
fullText.addAttribute(
    NSAttributedString.Key.font,
    value: UIFont.boldSystemFont(ofSize: 16),
    range: priceLabelRange)

// Format "$24.99" with green color
let amountRange = NSRange(
    location: 7, length: 6)
fullText.addAttribute(
    NSAttributedString.Key.foregroundColor,
    value: UIColor.systemGreen(),
    range: amountRange)
fullText.addAttribute(
    NSAttributedString.Key.font,
    value: UIFont.boldSystemFont(ofSize: 22),
    range: amountRange)

// Apply gray color to "per month" text
let periodRange = NSRange(
    location: 14, length: 9)
fullText.addAttribute(
    NSAttributedString.Key.foregroundColor,
    value: UIColor.secondaryLabel,
    range: periodRange)

label.attributedText = fullText

İnteraktiv linklərlə UITextView-də göstərilməsi

UITextView NSAttributedString-də interaktiv linkləri dəstəkləyir. NSURL ilə .link atributu mətni kliklənə bilən edir. Klikləri idarə etmək üçün textView(_:shouldInteractWith:in:interaction:) metodu ilə UITextViewDelegate istifadə olunur. UITextView həmçinin mətnin seçilməsini və standart əməliyyatlar (kopyalama, axtarış) üçün UIMenuController istifadəsini dəstəkləyir.

NSAttributedString-in HTML və RTF-yə çevrilməsi

NSAttributedString NSAttributedString.DocumentType vasitəsilə HTML və RTF-dən çevrilməni dəstəkləyir. HTML yükləmək üçün documentAttributes parametrləri ilə inizializator istifadə olunur: NSAttributedString(data: htmlData, options: [.documentType: .html], documentAttributes: nil). RTF üçün də eyni şəkildə: .rtf və ya .rtfd. Bu mexanizm WebView olmadan HTML məzmununu göstərmək üçün faydalıdır.

HTML-ə eksport üçün diapazon və sənəd növü ilə data(from:documentAttributes:) metodu istifadə olunur. HTML export: try attributedString.data(from: fullRange, documentAttributes: [.documentType: .html]). Alınan məlumatları fayla saxlamaq, serverə göndərmək və ya WebView-də göstərmək olar. Eksport zamanı şriftlər, rənglər, düzləndirmə, siyahılar saxlanılır — bütün formatlaşdırma atributları CSS stillərinə çevrilir.

RTF dəstəyi xüsusilə RTF-nin zəngin mətnin standart formatı olduğu macOS tətbiqləri üçün aktualdır. iOS da RTF oxumağı və yazmağı dəstəkləyir, lakin onu əsas format kimi istifadə etmir. RTF və RTFD arasındakı fərq: RTFD kataloqa yığılmış iç-içə resursları (şəkillər) ehtiva edir. NSAttributedString vahid interfeys vasitəsilə hər iki formatı emal edə bilər.

swift
let htmlString = "<p><b>Bold<\/b> and <i>italic<\/i><\/p>"
guard let htmlData = htmlString.data(
    using: String.Encoding.utf8) else { return }

let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
    NSAttributedString.DocumentReadingOptionKey.documentType:
        NSAttributedString.DocumentType.html
]

let attributedFromHTML =
    try? NSAttributedString(
        data: htmlData,
        options: options,
        documentAttributes: nil)

Tez-tez verilən suallar

NSString və NSAttributedString arasında fərq nədir?

NSString yalnız Unicode simvollarının ardıcıllığını heç bir formatlaşdırma məlumatı olmadan saxlayır. NSAttributedString simvolları saxlayır və hər alt diapazon üçün atributlar lüğəti (şrift, rəng, stil) ehtiva edir. NSAttributedString göstərildikdə UIKit formatlaşdırılmış mətn yaratmaq üçün bu atributlardan istifadə edir.

Niyə UILabel NSAttributedString atributlarını göstərmir?

Ən çox yayılmış səbəb — attributedText əvəzinə text xassəsindən istifadə etməkdir. Text vasitəsilə təyin edərkən bütün atributlar nəzərə alınmır. İkinci səbəb: attributedText təyin etdikdən sonra UILabel-in font, textColor və ya textAlignment xassələrini dəyişirsiniz — bu dəyişikliklər attributedText-i sıfırlayır. Formatlaşdırılmış mətn üçün yalnız attributedText istifadə edin.

Bir sətirdə müxtəlif şriftləri necə tətbiq etmək olar?

NSMutableAttributedString yaradın və müxtəlif şriftli hər hissə üçün addAttribute(.font, value: boldFont, range: boldRange) çağırın. Hər çağırış atributu yalnız göstərilən diapazona tətbiq edir. Qalan simvollar standart şrifti və ya əvvəllər təyin edilmiş başqa şrifti saxlayır. Beləliklə, müxtəlif şriftlərlə atribut diapazonları (attribute runs) yaradılır.

NSAttributedString çoxsətirli mətnlə işləyirmi?

Bəli, NSAttributedString çoxsətirli mətni, o cümlədən yeni sətir simvollarını ( ) düzgün emal edir. UITextView və UILabel (numberOfLines = 0 ilə) avtomatik olaraq mətni yeni sətirə keçirir. NSMutableParagraphStyle hər abzas üçün müstəqil olaraq sətirarası interval, abzaslar və düzləndirməni idarə edir.

Bir sətirdə müxtəlif rənglərlə rəngli mətn necə yaradılır?

Hər rəng diapazonu üçün .foregroundColor atributu ilə NSMutableAttributedString istifadə edin. Qırmızı mətn üçün: addAttribute(.foregroundColor, value: UIColor.red, range: firstRange). Mavi üçün: addAttribute(.foregroundColor, value: UIColor.blue, range: secondRange). Rənglər yalnız göstərilən simvol diapazonlarına tətbiq ediləcək.

Xülasə

  • NSAttributedString — hər simvol diapazonu üçün lüğətdə saxlanılan formatlaşdırma atributları (şrift, rəng, stil) olan sətir
  • NSMutableAttributedString — dinamik formatlaşdırma üçün addAttribute, setAttributes və removeAttribute metodları ilə dəyişən versiya
  • Əsas atributlar: .font, .foregroundColor, .paragraphStyle, .kern, .underlineStyle, .strikethroughStyle, .link, .shadow, .baselineOffset
  • NSMutableParagraphStyle abzaslar üçün düzləndirmə, sətirarası interval, abzaslar və mətn istiqamətini idarə edir
  • UILabel, UITextView, UITextField attributedText xassəsi vasitəsilə formatlaşdırılmış mətnin göstərilməsini dəstəkləyir
  • HTML/RTF konvertasiyası — NSAttributedString documentType vasitəsilə formatlaşdırılmış mətnin idxal və ixracını dəstəkləyir

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