Attributed Text: τι είναι, τύποι χαρακτηριστικών και στυλιζάρισμα

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-23 Χρόνος ανάγνωσης: 8 λεπ

Attributed Text είναι ένας μηχανισμός του iOS SDK, που αντιπροσωπεύεται από τις κλάσεις NSAttributedString και NSMutableAttributedString, ο οποίος επιτρέπει την εφαρμογή πολλαπλών στυλ σε διαφορετικά τμήματα μιας συμβολοσειράς κειμένου. Σε αντίθεση με το συνηθισμένο NSString, το Attributed String αποθηκεύει όχι μόνο χαρακτήρες αλλά και ένα λεξικό χαρακτηριστικών για κάθε εύρος: γραμματοσειρά, χρώμα, διάστιχο, σκιά και στοίχιση. Σύμφωνα με το Apple Developer Documentation, το Attributed String αποτελεί τη βάση για την εμφάνιση μορφοποιημένου κειμένου σε UILabel, UITextView και UITextField. Είναι ο τυπικός τρόπος στυλιζαρίσματος κειμένου χωρίς WebKit ή βιβλιοθήκες τρίτων.

Κύρια σημεία

  • NSAttributedString — αμετάβλητη κλάση για στυλιζάρισμα κειμένου μέσω λεξικών χαρακτηριστικών στο iOS
  • Χαρακτηριστικά περιλαμβάνουν γραμματοσειρά, χρώμα, διάστιχο, σκιά, υπογράμμιση και στοίχιση
  • NSMutableAttributedString — μεταβλητή έκδοση για δυναμική εφαρμογή στυλ
  • addAttributes εφαρμόζει λεξικό χαρακτηριστικών σε ένα εύρος, addAttribute — ένα χαρακτηριστικό
  • NSAttributedString χρησιμοποιείται σε UILabel, UITextView, UITextField και Core Text

Τι είναι το Attributed Text στο iOS;

NSAttributedString είναι μια κλάση του πλαισίου Foundation που αντιπροσωπεύει μια συμβολοσειρά με ένα σύνολο ονομασμένων χαρακτηριστικών συνδεδεμένων σε εύρη χαρακτήρων. Κάθε χαρακτηριστικό είναι ένα ζεύγος κλειδιού-τιμής: το κλειδί ορίζεται από μια σταθερά (NSFontAttributeName, NSForegroundColorAttributeName) και η τιμή από ένα αντίστοιχο αντικείμενο (UIFont, UIColor). Τα χαρακτηριστικά εφαρμόζονται σε ένα εύρος χαρακτήρων μέσω NSRange.

Η κλάση είναι διαθέσιμη σε όλες τις πλατφόρμες Apple: iOS (2.0+), macOS, tvOS, watchOS. Το NSAttributedString είναι αμετάβλητο — μετά τη δημιουργία, τα χαρακτηριστικά του είναι σταθερά. Για δυναμική αλλαγή χρησιμοποιείται το NSMutableAttributedString, το οποίο κληρονομεί το NSAttributedString και προσθέτει τις μεθόδους setAttributes, addAttributes, addAttribute, removeAttribute.

Διαφορά από το NSString

NSString είναι μια απλή συμβολοσειρά χαρακτήρων χωρίς πληροφορίες στυλ. Οποιοδήποτε κείμενο μεταβιβαστεί στο UILabel μέσω text εμφανίζεται με μία γραμματοσειρά, χρώμα και μέγεθος. Το NSAttributedString που μεταβιβάζεται μέσω attributedText επιτρέπει σε κάθε χαρακτήρα να έχει το δικό του σύνολο χαρακτηριστικών. Τα UILabel, UITextView και UITextField αναγνωρίζουν αυτόματα το NSAttributedString και αποδίδουν το κείμενο σύμφωνα με τα χαρακτηριστικά.

Μορφή αποθήκευσης

Εσωτερικά, το NSAttributedString αποθηκεύει ένα NSString με το κείμενο και έναν πίνακα ευρών χαρακτηριστικών. Κάθε εύρος αντιπροσωπεύεται από μια δομή NSRange και ένα λεξικό χαρακτηριστικών. Κατά την απόδοση, το σύστημα διατρέχει τα εύρη και εφαρμόζει τα αντίστοιχα χαρακτηριστικά σε κάθε τμήμα. Η αποδοτικότητα εξαρτάται από τον αριθμό εναλλαγών χαρακτηριστικών — οι συχνές αλλαγές σε σύντομα τμήματα αυξάνουν τον χρόνο απόδοσης.

Χαρακτηριστικά NSAttributedString

Χαρακτηριστικά NSAttributedString είναι σταθερές που ορίζονται στο UIKit (iOS) και AppKit (macOS), κάθε μία από τις οποίες αντιστοιχεί σε μια συγκεκριμένη πτυχή της οπτικής μορφοποίησης κειμένου. Όλα τα χαρακτηριστικά είναι συμβολοσειρές NSAttributedString.Key και οι τιμές τους είναι αντικείμενα συγκεκριμένων κλάσεων. Τα χαρακτηριστικά χωρίζονται σε χαρακτηριστικά χαρακτήρων (επηρεάζουν τους χαρακτήρες) και χαρακτηριστικά παραγράφων (επηρεάζουν τις παραγράφους).

Τα χαρακτηριστικά χαρακτήρων περιλαμβάνουν γραμματοσειρά (NSFontAttributeName), χρώμα κειμένου (NSForegroundColorAttributeName), χρώμα φόντου (NSBackgroundColorAttributeName), υπογράμμιση (NSUnderlineStyleAttributeName), διαγραφή (NSStrikethroughStyleAttributeName), σκιά (NSShadowAttributeName). Τα χαρακτηριστικά παραγράφου ορίζονται μέσω NSParagraphStyleAttributeName, το οποίο ελέγχει τη στοίχιση, τις εσοχές, το διάστιχο και τη στοίχιση στηλών.

Χαρακτηριστικά συνδέσμων και διαδραστικότητας

NSLinkAttributeName δημιουργεί έναν κλικ-able σύνδεσμο στο κείμενο: η τιμή είναι ένα URL ή συμβολοσειρά. Το UITextView επεξεργάζεται αυτόματα τέτοιους συνδέσμους εάν η αλληλεπίδραση είναι ενεργοποιημένη. Το NSAttachmentAttributeName επιτρέπει την ενσωμάτωση NSTextAttachment — μιας εικόνας μέσα στο κείμενο που εμφανίζεται ως inline στοιχείο. Αυτό χρησιμοποιείται για τη δημιουργία κειμένου με εικονίδια, emoji ή προσαρμοσμένες προβολές εντός της συμβολοσειράς.

Βασικά χαρακτηριστικά στυλιζαρίσματος

Κάθε χαρακτηριστικό NSAttributedString έχει μια αυστηρά τυποποιημένη τιμή. Ας δούμε τα πιο συχνά χρησιμοποιούμενα χαρακτηριστικά στην ανάπτυξη iOS. Η γραμματοσειρά ορίζεται από ένα αντικείμενο UIFont, το χρώμα από UIColor, το διάστιχο μέσω NSMutableParagraphStyle, το οποίο επιτρέπει τη ρύθμιση της στοίχισης, των εσοχών και των αποστάσεων σε ένα αντικείμενο.

Κλειδί χαρακτηριστικούΤύπος τιμήςΣκοπός
NSFontAttributeNameUIFontΓραμματοσειρά κειμένου
NSForegroundColorAttributeNameUIColorΧρώμα κειμένου
NSBackgroundColorAttributeNameUIColorΧρώμα φόντου κάτω από το κείμενο
NSUnderlineStyleAttributeNameNSNumber (Int)Στυλ υπογράμμισης
NSParagraphStyleAttributeNameNSParagraphStyleΡυθμίσεις παραγράφου
NSKernAttributeNameNSNumber (Float)Διάστιχο μεταξύ γραμμάτων

NSParagraphStyle

NSParagraphStyle είναι ένα δοχείο για χαρακτηριστικά παραγράφου: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight και άλλα. Για να αλλάξετε αυτές τις παραμέτρους, δημιουργείται ένα NSMutableParagraphStyle, ρυθμίζονται οι επιθυμητές ιδιότητες και το αντικείμενο μεταβιβάζεται ως τιμή του χαρακτηριστικού NSParagraphStyleAttributeName. Αυτός είναι ο μόνος τρόπος ελέγχου του διάστιχου στο NSAttributedString.

Σκιά και εφέ

NSShadow επιτρέπει την προσθήκη σκιάς στο κείμενο: οι παράμετροι shadowOffset, shadowBlurRadius, shadowColor ορίζουν τη μετατόπιση, τη θόλωση και το χρώμα της σκιάς. Τα χαρακτηριστικά υπογράμμισης και διαγραφής δέχονται συνδυασμούς στυλ: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Για ακριβή έλεγχο του πάχους και του χρώματος των γραμμών χρησιμοποιούνται τα NSUnderlineColorAttributeName και NSStrikethroughColorAttributeName.

Πώς να χρησιμοποιήσετε το NSAttributedString στον κώδικα

Η δημιουργία ενός NSAttributedString στη Swift γίνεται μέσω αρχικοποιητή με καθορισμό κειμένου και λεξικού χαρακτηριστικών, ή μέσω NSMutableAttributedString με σταδιακή εφαρμογή στυλ. Η βασική προσέγγιση — ορισμός ενός λεξικού χαρακτηριστικών για ολόκληρο το κείμενο, στη συνέχεια προσθήκη ή αλλαγή χαρακτηριστικών για μεμονωμένα εύρη.

Δημιουργία με χαρακτηριστικά για ολόκληρο το κείμενο

Ένα απλό παράδειγμα — ορισμός γραμματοσειράς, χρώματος και στοίχισης για ολόκληρη τη συμβολοσειρά. Το λεξικό χαρακτηριστικών μεταβιβάζεται στον αρχικοποιητή NSAttributedString. Τα κλειδιά του λεξικού είναι σταθερές NSAttributedString.Key, οι τιμές είναι αντίστοιχα αντικείμενα UIKit. Αυτή είναι η βασική παραλλαγή όταν ολόκληρο το κείμενο μορφοποιείται ομοιόμορφα.

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

Το κείμενο θα εμφανιστεί με γραμματοσειρά systemFont 16, σκούρο γκρι χρώμα, στοίχιση στο κέντρο και διάστιχο 4pt. Αυτή η προσέγγιση είναι βολική για στατικές επικεφαλίδες και κουμπιά.

Εφαρμογή σε εύρος

NSMutableAttributedString επιτρέπει την εφαρμογή διαφορετικών στυλ σε διαφορετικά τμήματα κειμένου. Η μέθοδος addAttribute προσθέτει ένα χαρακτηριστικό σε ένα εύρος, addAttributes — ένα λεξικό χαρακτηριστικών. Η μέθοδος setAttributes αντικαθιστά όλα τα χαρακτηριστικά του εύρους με νέα. Αυτό είναι το κύριο εργαλείο για τη δημιουργία κειμένου με επισημάνσεις.

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” θα είναι πράσινη και έντονη, το υπόλοιπο κείμενο — κανονικό. Το NSRange υπολογίζεται χειροκίνητα — είναι σημαντικό να μετράτε σωστά το μήκος σε χαρακτήρες, ειδικά όταν εργάζεστε με emoji και σύνθετους χαρακτήρες Unicode.

Δυναμικά στυλ με NSMutableAttributedString

NSMutableAttributedString παρέχει μεθόδους για δυναμική αλλαγή κειμένου και χαρακτηριστικών: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Αυτό επιτρέπει τη δημιουργία κειμένου από διαφορετικές πηγές, τον συνδυασμό στυλ και την ανταπόκριση σε γεγονότα διεπαφής.

Σε αντίθεση με το αμετάβλητο NSAttributedString, η mutable έκδοση υποστηρίζει αλλαγή περιεχομένου χωρίς δημιουργία νέου αντικειμένου. Αυτό είναι κρίσιμο για επεξεργαστές κειμένου, συνομιλίες και φόρμες, όπου ο χρήστης μπορεί να επεξεργαστεί το κείμενο και τα στυλ πρέπει να διατηρηθούν.

Συνδυασμός στυλ σε συνομιλία

Στις εφαρμογές ανταλλαγής μηνυμάτων, κάθε μήνυμα περιέχει όνομα χρήστη (έντονη γραμματοσειρά), κείμενο μηνύματος (κανονικό), ώρα(γκρι χρώμα). Το NSMutableAttributedString επιτρέπει τη δημιουργία μιας τέτοιας συμβολοσειράς με μία κίνηση, προσθέτοντας τμήματα στη σωστή σειρά με τα κατάλληλα χαρακτηριστικά.

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

Το αποτέλεσμα — μία συμβολοσειρά με τρία τμήματα διαφορετικών στυλ. Το Append υπολογίζει αυτόματα σωστά το NSRange, οι θέσεις δεν χρειάζεται να υπολογίζονται χειροκίνητα. Αυτή η προσέγγιση κλιμακώνεται σε οποιονδήποτε αριθμό τμημάτων.

Επανάληψη χαρακτηριστικών

Η μέθοδος enumerateAttributes(in:options:using:) διατρέχει όλα τα εύρη χαρακτηριστικών στο καθορισμένο διάστημα. Αυτό είναι χρήσιμο για ανάλυση μορφοποίησης: εύρεση όλων των συνδέσμων, αλλαγή χρώματος συγκεκριμένων χαρακτηριστικών ή εξαγωγή κειμένου σε HTML. Στο κλείσιμο μεταβιβάζονται το λεξικό χαρακτηριστικών και το NSRange του τρέχοντος τμήματος.

Attributed Text σε στοιχεία UIKit

Όλα τα βασικά στοιχεία UI για εμφάνιση κειμένου στο UIKit υποστηρίζουν NSAttributedString μέσω της ιδιότητας attributedText. Το UILabel εμφανίζει στατικό στυλιζαρισμένο κείμενο, το UITextView υποστηρίζει επεξεργασία και συνδέσμους, το UITextField δέχεται χαρακτηριστικά ξεχωριστά για το placeholder και το εισαγόμενο κείμενο.

UILabel με attributedText

UILabel είναι το ελαφρύτερο στοιχείο για εμφάνιση στυλιζαρισμένου κειμένου. Υποστηρίζει όλα τα χαρακτηριστικά χαρακτήρων, αλλά δεν επεξεργάζεται αυτόματα κλικ-able συνδέσμους (για αυτό απαιτείται UITextView). Το UILabel είναι ιδανικό για επικεφαλίδες, ετικέτες και σύντομα κείμενα με μορφοποίηση.

UITextView με συνδέσμους

UITextView επεξεργάζεται το NSLinkAttributeName και εμφανίζει συνδέσμους ως διαδραστικά στοιχεία. Για να ενεργοποιήσετε αυτή τη λειτουργία, ορίστε isSelectable = true και isEditable = false. Όταν γίνει κλικ σε έναν σύνδεσμο, ο εκπρόσωπος λαμβάνει την κλήση textView(_:shouldInteractWith:in:interaction:). Το UITextView υποστηρίζει επίσης NSTextAttachment για εικόνες μέσα στο κείμενο.

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

Μετά τη ρύθμιση των isSelectable και isEditable, η περιοχή κειμένου συμπεριφέρεται ως στατικό μπλοκ κειμένου, αλλά οι σύνδεσμοι παραμένουν ενεργοί. Ο εκπρόσωπος UITextViewDelegate διαχειρίζεται τη συμπεριφορά κατά το κλικ.

Ενσωμάτωση με Core Text

Core Text είναι ένα χαμηλού επιπέδου πλαίσιο της Apple για απόδοση κειμένου που λειτουργεί άμεσα με το NSAttributedString. Σε αντίθεση με το UIKit, το Core Text δεν χρησιμοποιεί το NSAttributedString άμεσα ως αντικείμενο προς εμφάνιση, αλλά το μετατρέπει σε CTFramesetter, στη συνέχεια σε CTFrame και το αποδίδει σε ένα πλαίσιο Core Graphics. Αυτό δίνει πλήρη έλεγχο επί της τοποθέτησης γραμμών και γλυφών.

Η χρήση του Core Text δικαιολογείται για προσαρμοσμένες διατάξεις κειμένου: στήλες, ροή γύρω από εικόνες, περιστροφή κειμένου, μη τυπικές αλλαγές γραμμών. Το NSMutableParagraphStyle του Core Text περιλαμβάνει χαρακτηριστικά που δεν υπάρχουν στο UIKit: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode με πρόσθετες λειτουργίες.

Μετατροπή μεταξύ UIKit και Core Text

NSAttributedString μεταφέρεται απρόσκοπτα μεταξύ UIKit και Core Text, καθώς και τα δύο πλαίσια λειτουργούν με τον ίδιο τύπο. Τα χαρακτηριστικά UIKit (NSFontAttributeName, NSForegroundColorAttributeName) αναγνωρίζονται αυτόματα από το Core Text και αντίστροφα — τα χαρακτηριστικά Core Text (kCTFontAttributeName) διαβάζονται από το UIKit. Αυτό επιτρέπει τη χρήση UIKit για απλές εργασίες και Core Text για προσαρμοσμένη απόδοση στο ίδιο αντικείμενο NSAttributedString.

Συχνές ερωτήσεις

Σε τι διαφέρει το NSAttributedString από το NSString;

NSString αποθηκεύει μόνο κείμενο χωρίς πληροφορίες στυλ. Το NSAttributedString συμπληρώνει το κείμενο με ένα λεξικό χαρακτηριστικών για κάθε εύρος χαρακτήρων. Όταν μεταβιβάζεται στο UILabel μέσω της ιδιότητας text, το NSString εμφανίζεται ως απλό κείμενο. Όταν μεταβιβάζεται το NSAttributedString μέσω της ιδιότητας attributedText, εφαρμόζονται όλα τα χαρακτηριστικά: διαφορετικές γραμματοσειρές, χρώματα και αποστάσεις σε μία συμβολοσειρά.

Πώς προσθέτω πολλαπλά χαρακτηριστικά σε ένα εύρος;

Χρησιμοποιήστε τη μέθοδο addAttributes(_:range:) με ένα λεξικό χαρακτηριστικών: addAttributes([.font: font, .foregroundColor: color], range: range). Για να προσθέσετε ή να αλλάξετε ένα χαρακτηριστικό, χρησιμοποιήστε addAttribute(_:value:range:). Η μέθοδος setAttributes αντικαθιστά όλα τα υπάρχοντα χαρακτηριστικά στο εύρος με νέα.

Πώς αλλάζω το διάστιχο στο NSAttributedString;

Δημιουργήστε ένα NSMutableParagraphStyle, ορίστε την ιδιότητα lineSpacing και στη συνέχεια μεταβιβάστε το ως τιμή του χαρακτηριστικού NSParagraphStyleAttributeName. Για πλήρη έλεγχο, διατίθενται επίσης minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode και alignment. Το ParagraphStyle είναι ο μόνος τρόπος ελέγχου του διάστιχου.

Λειτουργούν τα χαρακτηριστικά στο SwiftUI;

Ναι, το SwiftUI υποστηρίζει NSAttributedString μέσω Text(attributedString:) στο iOS 15+. Σε παλαιότερες εκδόσεις, χρησιμοποιήστε UIViewRepresentable με UILabel ή UITextView. Το SwiftUI παρέχει επίσης τον δικό του τύπο AttributedString (SwiftUI, όχι Foundation) για δηλωτική μορφοποίηση με σύνταξη παρόμοια με Markdown.

Πώς υπολογίζω το μέγεθος του NSAttributedString;

Χρησιμοποιήστε τη μέθοδο boundingRect(with:options:context:), η οποία επιστρέφει το CGRect που απαιτείται για την εμφάνιση της συμβολοσειράς με τα καθορισμένα χαρακτηριστικά. Η παράμετρος options: [.usesLineFragmentOrigin, .usesFontLeading] λαμβάνει υπόψη τα διάστιχα και τις μετρικές γραμματοσειράς. Για UILabel με περιορισμένο αριθμό γραμμών, χρησιμοποιήστε sizeThatFits.

Σύνοψη

  • NSAttributedString — κλάση Foundation για στυλιζάρισμα κειμένου μέσω λεξικών χαρακτηριστικών στο iOS
  • Χαρακτηριστικά περιλαμβάνουν γραμματοσειρά (UIFont), χρώμα (UIColor), υπογράμμιση, σκιά και ρυθμίσεις παραγράφου
  • NSMutableAttributedString — δυναμική έκδοση με προσθήκη και αφαίρεση χαρακτηριστικών
  • addAttributes(_:range:) εφαρμόζει λεξικό χαρακτηριστικών σε ένα εύρος χαρακτήρων
  • NSParagraphStyle ελέγχει το διάστιχο, τη στοίχιση και τις εσοχές
  • UILabel, UITextView, UITextField υποστηρίζουν attributedText για εμφάνιση στυλ
  • Core Text χρησιμοποιεί το ίδιο NSAttributedString για απόδοση χαμηλού επιπέδου

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης