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 — 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.
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 tipi | Təyinat |
|---|---|---|
| .font | UIFont | Mətnin şrifti və ölçüsü |
| .foregroundColor | UIColor | Mətnin rəngi |
| .backgroundColor | UIColor | Mətn altında fon rəngi |
| .paragraphStyle | NSParagraphStyle | Düzləndirmə, sətirarası interval, abzaslar |
| .kern | NSNumber (Float) | Simvollararası interval (kerning) |
| .underlineStyle | NSUnderlineStyle (Int) | Altından xətt çəkmə stili (single, double, thick, pattern) |
| .strikethroughStyle | NSUnderlineStyle (Int) | Üstündən xətt çəkmə stili |
| .link | NSURL | İnteraktiv hiperlink üçün URL |
| .shadow | NSShadow | Offset, blurRadius və rənglə mətn kölgəsi |
| .baselineOffset | NSNumber (Float) | Mətnin baza xəttinə nisbətən yerdəyişməsi |
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.
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.
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)
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.
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 — 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:).
addAttribute və addAttributes 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 NSIntersectionRange və NSUnionRange kimi NSRange metodlarından istifadə olunur.
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)
Ə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.
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
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 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.
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 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.
Ə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.
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.
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.
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ə
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.
Həm də oxuyun