Attributed Text: mi ez, attribútumtípusok és stílusozás

Szerző: IT Sectr Megjelenés: 2026-07-23 Olvasási idő: 8 perc

Attributed Text az iOS SDK mechanizmusa, amelyet az NSAttributedString és NSMutableAttributedString osztályok képviselnek, és lehetővé teszi több stílus alkalmazását egy szöveges karakterlánc különböző részeire. A hagyományos NSString-től eltérően az Attributed String nemcsak karaktereket, hanem attribútumok szótárát is tárolja minden tartományhoz: betűtípus, szín, sorköz, árnyék és igazítás. A Apple Developer Documentation szerint az Attributed String a formázott szöveg megjelenítésének alapja UILabel, UITextView és UITextField esetén. Ez a szabványos módja a szöveg stílusozásának WebKit vagy külső könyvtárak nélkül.

Főbb pontok

  • NSAttributedString — megváltoztathatatlan osztály szöveg stílusozására attribútumszótárakon keresztül iOS-ben
  • Attribútumok tartalmazzák a betűtípust, színt, sorközt, árnyékot, aláhúzást és igazítást
  • NSMutableAttributedString — változtatható verzió stílusok dinamikus alkalmazásához
  • addAttributes attribútumszótárat alkalmaz egy tartományra, addAttribute — egy attribútumot
  • NSAttributedString használatos UILabel, UITextView, UITextField és Core Text esetén

Mi az Attributed Text iOS-ben?

NSAttributedString a Foundation keretrendszer osztálya, amely egy karakterláncot reprezentál karaktertartományokhoz kötött elnevezett attribútumok halmazával. Minden attribútum egy kulcs-érték pár: a kulcsot egy konstans (NSFontAttributeName, NSForegroundColorAttributeName), az értéket pedig egy megfelelő objektum (UIFont, UIColor) határozza meg. Az attribútumok NSRange-en keresztül kerülnek alkalmazásra egy karaktertartományra.

Az osztály az összes Apple platformon elérhető: iOS (2.0+), macOS, tvOS, watchOS. Az NSAttributedString megváltoztathatatlan — létrehozás után attribútumai rögzítettek. Dinamikus módosításhoz az NSMutableAttributedString használatos, amely az NSAttributedString-ből származik és hozzáadja a setAttributes, addAttributes, addAttribute, removeAttribute metódusokat.

Különbség az NSString-től

NSString egy egyszerű karakterlánc stílusinformáció nélkül. Bármely szöveg, amelyet text-en keresztül UILabel-nek adunk át, egyetlen betűtípussal, színnel és mérettel jelenik meg. Az attributedText-en keresztül átadott NSAttributedString lehetővé teszi, hogy minden karakternek saját attribútumkészlete legyen. Az UILabel, UITextView és UITextField automatikusan felismeri az NSAttributedString-t és a szöveget az attribútumoknak megfelelően jeleníti meg.

Tárolási formátum

Belsőleg az NSAttributedString egy NSString-t tárol a szöveggel és attribútumtartományok tömbjét. Minden tartományt egy NSRange struktúra és egy attribútumszótár reprezentál. Megjelenítéskor a rendszer végighalad a tartományokon és alkalmazza a megfelelő attribútumokat minden részre. A hatékonyság az attribútumváltások számától függ — gyakori váltások rövid szakaszokon növelik a megjelenítési időt.

NSAttributedString attribútumai

NSAttributedString attribútumai a UIKit (iOS) és AppKit (macOS) által definiált konstansok, amelyek mindegyike a szöveg vizuális formázásának egy meghatározott aspektusának felel meg. Minden attribútum NSAttributedString.Key karakterlánc, értékeik pedig meghatározott osztályok objektumai. Az attribútumok karakter (karakterekre hatnak) és bekezdés (bekezdésekre hatnak) típusúakra oszlanak.

Karakter attribútumok tartalmazzák a betűtípust (NSFontAttributeName), szöveg színét (NSForegroundColorAttributeName), háttérszínét (NSBackgroundColorAttributeName), aláhúzást (NSUnderlineStyleAttributeName), áthúzást (NSStrikethroughStyleAttributeName), árnyékot (NSShadowAttributeName). Bekezdés attribútumok az NSParagraphStyleAttributeName-en keresztül kerülnek beállításra, amely az igazítást, behúzásokat, sorközt és tabulálást vezérli.

Linkek és interaktivitás attribútumai

NSLinkAttributeName kattintható linket hoz létre a szövegben: az érték egy URL vagy karakterlánc. Az UITextView automatikusan feldolgozza az ilyen linkeket, ha az interakció engedélyezve van. Az NSAttachmentAttributeName lehetővé teszi NSTextAttachment beágyazását — egy képet a szövegben, amely inline elemként jelenik meg. Ez ikonokkal, emojikkal vagy egyedi nézetekkel ellátott szövegek létrehozására használatos a karakterláncon belül.

Alapvető stílusozási attribútumok

Minden NSAttributedString attribútumnak szigorúan tipizált értéke van. Nézzük meg a leggyakrabban használt attribútumokat iOS fejlesztésben. A betűtípust UIFont objektum, a színt UIColor, a sorközt NSMutableParagraphStyle állítja be, amely lehetővé teszi az igazítás, behúzások és távolságok egy objektumban történő konfigurálását.

Attribútum kulcsÉrték típusaCél
NSFontAttributeNameUIFontSzöveg betűtípusa
NSForegroundColorAttributeNameUIColorSzöveg színe
NSBackgroundColorAttributeNameUIColorHáttérszín a szöveg alatt
NSUnderlineStyleAttributeNameNSNumber (Int)Aláhúzás stílusa
NSParagraphStyleAttributeNameNSParagraphStyleBekezdés beállítások
NSKernAttributeNameNSNumber (Float)Betűköz

NSParagraphStyle

NSParagraphStyle egy konténer a bekezdés attribútumokhoz: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight és mások. Ezen paraméterek módosításához létrehozunk egy NSMutableParagraphStyle-t, beállítjuk a kívánt tulajdonságokat, és az objektumot átadjuk az NSParagraphStyleAttributeName attribútum értékeként. Ez az egyetlen módja a sorköz vezérlésének az NSAttributedString-ben.

Árnyék és effektek

NSShadow lehetővé teszi árnyék hozzáadását a szöveghez: a shadowOffset, shadowBlurRadius, shadowColor paraméterek az árnyék elmozdulását, elmosását és színét állítják be. Az aláhúzás és áthúzás attribútumok stílusok kombinációit fogadják el: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. A vonalak vastagságának és színének pontos vezérléséhez az NSUnderlineColorAttributeName és NSStrikethroughColorAttributeName használatos.

Hogyan használjuk az NSAttributedString-t kódban

Az NSAttributedString létrehozása Swift-ben az inicializátoron keresztül történik a szöveg és attribútumszótár megadásával, vagy NSMutableAttributedString-en keresztül lépésről lépésre történő stílusalkalmazással. Az alapvető megközelítés — attribútumszótár definiálása a teljes szöveghez, majd attribútumok hozzáadása vagy módosítása egyes tartományokhoz.

Létrehozás attribútumokkal a teljes szöveghez

Egyszerű példa — betűtípus, szín és igazítás beállítása a teljes karakterlánchoz. Az attribútumszótár átadásra kerül az NSAttributedString inicializátorának. A szótár kulcsai NSAttributedString.Key konstansok, az értékek megfelelő UIKit objektumok. Ez az alapváltozat, amikor a teljes szöveg egységesen van formázva.

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

A szöveg systemFont 16 betűtípussal, sötétszürke színnel, középre igazítással és 4pt sorközzel jelenik meg. Ez a megközelítés kényelmes statikus fejlécekhez és gombokhoz.

Alkalmazás tartományra

NSMutableAttributedString lehetővé teszi különböző stílusok alkalmazását a szöveg különböző részeire. Az addAttribute metódus egy attribútumot ad egy tartományhoz, az addAttributes — attribútumszótárat. A setAttributes metódus a tartomány összes attribútumát újakra cseréli. Ez a fő eszköz kiemelésekkel ellátott szöveg létrehozásához.

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

Az „1999“ szó zöld és félkövér lesz, a többi szöveg — szabványos. Az NSRange manuálisan kerül kiszámításra — fontos a hossz helyes számolása karakterekben, különösen emojik és összetett Unicode karakterek esetén.

Dinamikus stílusok NSMutableAttributedString-tel

NSMutableAttributedString metódusokat biztosít a szöveg és attribútumok dinamikus módosításához: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Ez lehetővé teszi szöveg építését különböző forrásokból, stílusok kombinálását és felületi eseményekre való reagálást.

A megváltoztathatatlan NSAttributedString-től eltérően a mutable verzió támogatja a tartalom módosítását új objektum létrehozása nélkül. Ez kritikus szövegszerkesztők, chatek és űrlapok esetén, ahol a felhasználó szerkesztheti a szöveget, és a stílusokat meg kell őrizni.

Stílusok kombinálása chatben

Az üzenetküldő alkalmazásokban minden üzenet tartalmazza a felhasználónevet (félkövér betűtípus), az üzenet szövegét (normál), az időt (szürke szín). Az NSMutableAttributedString lehetővé teszi egy ilyen karakterlánc egy menetben történő felépítését, a részek megfelelő sorrendben, a megfelelő attribútumokkal történő hozzáadásával.

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

Az eredmény — egy karakterlánc három stílusos résszel. Az Append automatikusan helyesen számolja ki az NSRange-t, a pozíciókat nem kell manuálisan kiszámítani. Ez a megközelítés bármilyen számú töredékre skálázható.

Attribútumok bejárása

Az enumerateAttributes(in:options:using:) metódus végigmegy az összes attribútumtartományon a megadott intervallumban. Ez hasznos a formázás elemzéséhez: az összes link megtalálása, bizonyos attribútumok színének megváltoztatása vagy szöveg exportálása HTML-be. A lezárásban az attribútumszótár és az aktuális rész NSRange-je kerül átadásra.

Attributed Text UIKit komponensekben

Az összes alapvető UI komponens szöveg megjelenítéséhez a UIKit-ben támogatja az NSAttributedString-t az attributedText tulajdonságon keresztül. Az UILabel statikus stílusos szöveget jelenít meg, az UITextView támogatja a szerkesztést és linkeket, az UITextField külön fogadja el az attribútumokat a helyőrző és a bevitt szöveg számára.

UILabel attributedText-tel

UILabel a legkönnyebb komponens stílusos szöveg megjelenítéséhez. Támogatja az összes karakter attribútumot, de nem dolgozza fel automatikusan a kattintható linkeket (ehhez UITextView szükséges). Az UILabel ideális fejlécekhez, címkékhez és rövid, formázott szövegekhez.

UITextView linkekkel

UITextView feldolgozza az NSLinkAttributeName-t és a linkeket interaktív elemekként jeleníti meg. A funkció engedélyezéséhez állítsa be az isSelectable = true és isEditable = false értékeket. Linkre kattintva a delegált megkapja a textView(_:shouldInteractWith:in:interaction:) hívást. Az UITextView támogatja az NSTextAttachment-t is képekhez a szövegben.

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

Az isSelectable és isEditable beállítása után a szövegterület statikus szövegblokkként viselkedik, de a linkek aktívak maradnak. Az UITextViewDelegate delegált kezeli a kattintáskori viselkedést.

Integráció a Core Text-tel

Core Text az Apple alacsony szintű keretrendszere szöveg megjelenítéséhez, amely közvetlenül az NSAttributedString-tel dolgozik. A UIKit-től eltérően a Core Text nem használja közvetlenül az NSAttributedString-t megjelenítendő objektumként, hanem CTFramesetter-ré, majd CTFrame-ré alakítja, és Core Graphics kontextusban jeleníti meg. Ez teljes irányítást ad a sorok és glifek elhelyezése felett.

A Core Text használata egyedi szöveg elrendezésekhez indokolt: oszlopok, képek körülfolyása, szöveg forgatása, nem szabványos sortörések. A Core Text NSMutableParagraphStyle-ja olyan attribútumokat tartalmaz, amelyek a UIKit-ben nem léteznek: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode további módokkal.

Konverzió UIKit és Core Text között

NSAttributedString zökkenőmentesen átvihető a UIKit és Core Text között, mivel mindkét keretrendszer ugyanazzal a típussal dolgozik. A UIKit attribútumok (NSFontAttributeName, NSForegroundColorAttributeName) automatikusan felismerésre kerülnek a Core Text által és fordítva — a Core Text attribútumok (kCTFontAttributeName) olvashatóak a UIKit által. Ez lehetővé teszi a UIKit használatát egyszerű feladatokhoz és a Core Text használatát egyedi megjelenítéshez ugyanazon az NSAttributedString objektumon.

Gyakran ismételt kérdések

Miben különbözik az NSAttributedString az NSString-től?

NSString csak szöveget tárol stílusinformáció nélkül. Az NSAttributedString kiegészíti a szöveget egy attribútumszótárral minden karaktertartományhoz. Az UILabel-nek a text tulajdonságon keresztül átadva az NSString egyszerű szövegként jelenik meg. Az NSAttributedString-t az attributedText tulajdonságon keresztül átadva az összes attribútum alkalmazásra kerül: különböző betűtípusok, színek és távolságok egy karakterláncon belül.

Hogyan adhatok hozzá több attribútumot egy tartományhoz?

Használja az addAttributes(_:range:) metódust attribútumszótárral: addAttributes([.font: font, .foregroundColor: color], range: range). Egy attribútum hozzáadásához vagy módosításához használja az addAttribute(_:value:range:) metódust. A setAttributes metódus a tartomány összes meglévő attribútumát újakra cseréli.

Hogyan változtassam meg a sorközt az NSAttributedString-ben?

Hozzon létre egy NSMutableParagraphStyle-t, állítsa be a lineSpacing tulajdonságot, majd adja át az NSParagraphStyleAttributeName attribútum értékeként. Teljes irányításhoz elérhető még a minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode és alignment is. A ParagraphStyle az egyetlen módja a sorköz vezérlésének.

Működnek az attribútumok a SwiftUI-ban?

Igen, a SwiftUI támogatja az NSAttributedString-t a Text(attributedString:) segítségével iOS 15+-ban. Régebbi verziókban használjon UIViewRepresentable-t UILabel vagy UITextView elemekkel. A SwiftUI saját AttributedString típust is biztosít (SwiftUI, nem Foundation) deklaratív formázáshoz Markdown-szerű szintaxissal.

Hogyan számítsam ki az NSAttributedString méretét?

Használja a boundingRect(with:options:context:) metódust, amely visszaadja a megadott attribútumokkal rendelkező karakterlánc megjelenítéséhez szükséges CGRect-et. Az options: [.usesLineFragmentOrigin, .usesFontLeading] paraméter figyelembe veszi a sorközöket és betűmértékeket. Korlátozott sorszámú UILabel esetén használja a sizeThatFits metódust.

Összefoglalás

  • NSAttributedString — Foundation osztály szöveg stílusozására attribútumszótárakon keresztül iOS-ben
  • Attribútumok tartalmazzák a betűtípust (UIFont), színt (UIColor), aláhúzást, árnyékot és bekezdés beállításokat
  • NSMutableAttributedString — dinamikus verzió attribútumok hozzáadásával és eltávolításával
  • addAttributes(_:range:) attribútumszótárat alkalmaz egy karaktertartományra
  • NSParagraphStyle vezérli a sorközt, igazítást és behúzásokat
  • UILabel, UITextView, UITextField támogatják az attributedText-t a stílusok megjelenítéséhez
  • Core Text ugyanazt az NSAttributedString-t használja alacsony szintű megjelenítéshez

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is