Attributed Text: apa itu, jenis atribut dan stilasi

Penulis: IT Sectr Diterbitkan: 2026-07-23 Waktu membaca: 8 mnt

Attributed Text adalah mekanisme iOS SDK, diwakili oleh kelas NSAttributedString dan NSMutableAttributedString, yang memungkinkan penerapan banyak gaya ke bagian berbeda dari satu string teks. Berbeda dengan NSString biasa, Attributed String menyimpan tidak hanya karakter tetapi juga kamus atribut untuk setiap rentang: font, warna, spasi antar baris, bayangan, dan perataan. Menurut Apple Developer Documentation, Attributed String adalah dasar untuk menampilkan teks yang diformat di UILabel, UITextView, dan UITextField. Ini adalah cara standar untuk menata teks tanpa WebKit atau pustaka pihak ketiga.

Poin penting

  • NSAttributedString — kelas tidak berubah untuk menata teks melalui kamus atribut di iOS
  • Atribut mencakup font, warna, spasi antar baris, bayangan, garis bawah, dan perataan
  • NSMutableAttributedString — versi yang dapat diubah untuk penerapan gaya secara dinamis
  • addAttributes menerapkan kamus atribut ke rentang, addAttribute — satu atribut
  • NSAttributedString digunakan di UILabel, UITextView, UITextField, dan Core Text

Apa itu Attributed Text di iOS?

NSAttributedString adalah kelas dari framework Foundation yang mewakili string dengan serangkaian atribut bernama yang terikat pada rentang karakter. Setiap atribut adalah pasangan kunci-nilai: kunci didefinisikan oleh konstanta (NSFontAttributeName, NSForegroundColorAttributeName), dan nilai oleh objek yang sesuai (UIFont, UIColor). Atribut diterapkan ke rentang karakter melalui NSRange.

Kelas ini tersedia di semua platform Apple: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString tidak berubah — setelah dibuat, atributnya tetap. Untuk perubahan dinamis, digunakan NSMutableAttributedString, yang mewarisi NSAttributedString dan menambahkan metode setAttributes, addAttributes, addAttribute, removeAttribute.

Perbedaan dari NSString

NSString adalah string karakter sederhana tanpa informasi gaya. Teks apa pun yang diteruskan ke UILabel melalui text ditampilkan dengan satu font, warna, dan ukuran. NSAttributedString yang diteruskan melalui attributedText memungkinkan setiap karakter memiliki kumpulan atributnya sendiri. UILabel, UITextView, dan UITextField secara otomatis mengenali NSAttributedString dan merender teks sesuai atribut.

Format penyimpanan

Secara internal, NSAttributedString menyimpan NSString dengan teks dan larik rentang atribut. Setiap rentang diwakili oleh struktur NSRange dan kamus atribut. Saat merender, sistem melintasi rentang dan menerapkan atribut yang sesuai ke setiap bagian. Efisiensi tergantung pada jumlah peralihan atribut — perubahan yang sering pada bagian pendek meningkatkan waktu rendering.

Atribut NSAttributedString

Atribut NSAttributedString adalah konstanta yang didefinisikan di UIKit (iOS) dan AppKit (macOS), yang masing-masing sesuai dengan aspek tertentu dari pemformatan visual teks. Semua atribut adalah string NSAttributedString.Key, dan nilainya adalah objek dari kelas tertentu. Atribut dibagi menjadi atribut karakter (mempengaruhi karakter) dan atribut paragraf (mempengaruhi paragraf).

Atribut karakter mencakup font (NSFontAttributeName), warna teks (NSForegroundColorAttributeName), warna latar belakang (NSBackgroundColorAttributeName), garis bawah (NSUnderlineStyleAttributeName), coretan (NSStrikethroughStyleAttributeName), bayangan (NSShadowAttributeName). Atribut paragraf diatur melalui NSParagraphStyleAttributeName, yang mengontrol perataan, indentasi, spasi antar baris, dan tabulasi.

Atribut tautan dan interaktivitas

NSLinkAttributeName membuat tautan yang dapat diklik dalam teks: nilainya adalah URL atau string. UITextView secara otomatis memproses tautan semacam itu jika interaksi diaktifkan. NSAttachmentAttributeName memungkinkan penyematan NSTextAttachment — gambar di dalam teks yang ditampilkan sebagai elemen inline. Ini digunakan untuk membuat teks dengan ikon, emoji, atau tampilan khusus di dalam string.

Atribut stilasi dasar

Setiap atribut NSAttributedString memiliki nilai yang diketik secara ketat. Mari kita lihat atribut yang paling sering digunakan dalam pengembangan iOS. Font diatur oleh objek UIFont, warna oleh UIColor, spasi antar baris melalui NSMutableParagraphStyle, yang memungkinkan konfigurasi perataan, indentasi, dan spasi dalam satu objek.

Kunci atributTipe nilaiTujuan
NSFontAttributeNameUIFontFont teks
NSForegroundColorAttributeNameUIColorWarna teks
NSBackgroundColorAttributeNameUIColorWarna latar belakang di bawah teks
NSUnderlineStyleAttributeNameNSNumber (Int)Gaya garis bawah
NSParagraphStyleAttributeNameNSParagraphStylePengaturan paragraf
NSKernAttributeNameNSNumber (Float)Spasi antar huruf

NSParagraphStyle

NSParagraphStyle adalah wadah untuk atribut paragraf: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight, dan lainnya. Untuk mengubah parameter ini, NSMutableParagraphStyle dibuat, properti yang diinginkan dikonfigurasi, dan objek diteruskan sebagai nilai atribut NSParagraphStyleAttributeName. Ini adalah satu-satunya cara untuk mengontrol spasi antar baris di NSAttributedString.

Bayangan dan efek

NSShadow memungkinkan penambahan bayangan ke teks: parameter shadowOffset, shadowBlurRadius, shadowColor mengatur pergeseran, keburaman, dan warna bayangan. Atribut garis bawah dan coretan menerima kombinasi gaya: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Untuk kontrol yang tepat atas ketebalan dan warna garis, gunakan NSUnderlineColorAttributeName dan NSStrikethroughColorAttributeName.

Cara menggunakan NSAttributedString dalam kode

Pembuatan NSAttributedString di Swift dilakukan melalui inisialisator dengan menentukan teks dan kamus atribut, atau melalui NSMutableAttributedString dengan penerapan gaya langkah demi langkah. Pendekatan dasar — menentukan kamus atribut untuk seluruh teks, kemudian menambahkan atau mengubah atribut untuk rentang individual.

Membuat dengan atribut untuk seluruh teks

Contoh sederhana — mengatur font, warna, dan perataan untuk seluruh string. Kamus atribut diteruskan ke inisialisator NSAttributedString. Kunci kamus adalah konstanta NSAttributedString.Key, nilainya adalah objek UIKit yang sesuai. Ini adalah varian dasar ketika seluruh teks diformat secara seragam.

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

Teks akan ditampilkan dengan font systemFont 16, warna abu-abu gelap, perataan tengah, dan spasi antar baris 4pt. Pendekatan ini nyaman untuk judul statis dan tombol.

Menerapkan ke rentang

NSMutableAttributedString memungkinkan penerapan gaya yang berbeda ke bagian teks yang berbeda. Metode addAttribute menambahkan satu atribut ke rentang, addAttributes — kamus atribut. Metode setAttributes mengganti semua atribut rentang dengan yang baru. Ini adalah alat utama untuk membuat teks dengan penyorotan.

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

Kata “1999” akan berwarna hijau dan tebal, sisa teks — standar. NSRange dihitung secara manual — penting untuk menghitung panjang dengan benar dalam karakter, terutama saat bekerja dengan emoji dan karakter Unicode gabungan.

Gaya dinamis dengan NSMutableAttributedString

NSMutableAttributedString menyediakan metode untuk perubahan dinamis teks dan atribut: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Ini memungkinkan pembuatan teks dari berbagai sumber, menggabungkan gaya, dan merespons peristiwa antarmuka.

Tidak seperti NSAttributedString yang tidak berubah, versi mutable mendukung perubahan konten tanpa membuat objek baru. Ini penting untuk editor teks, obrolan, dan formulir, di mana pengguna dapat mengedit teks dan gaya harus dipertahankan.

Menggabungkan gaya dalam obrolan

Di aplikasi perpesanan, setiap pesan berisi nama pengguna (font tebal), teks pesan (biasa), waktu (warna abu-abu). NSMutableAttributedString memungkinkan pembuatan string seperti itu sekaligus, menambahkan bagian dalam urutan yang benar dengan atribut yang sesuai.

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

Hasilnya — satu string dengan tiga bagian bergaya. Append secara otomatis menghitung NSRange dengan benar, posisi tidak perlu dihitung secara manual. Pendekatan ini dapat diskalakan ke jumlah fragmen berapa pun.

Iterasi atribut

Metode enumerateAttributes(in:options:using:) melintasi semua rentang atribut dalam interval yang ditentukan. Ini berguna untuk menganalisis pemformatan: menemukan semua tautan, mengubah warna atribut tertentu, atau mengekspor teks ke HTML. Dalam closure, kamus atribut dan NSRange dari bagian saat ini diteruskan.

Attributed Text di komponen UIKit

Semua komponen UI dasar untuk menampilkan teks di UIKit mendukung NSAttributedString melalui properti attributedText. UILabel menampilkan teks bergaya statis, UITextView mendukung pengeditan dan tautan, UITextField menerima atribut secara terpisah untuk placeholder dan teks yang dimasukkan.

UILabel dengan attributedText

UILabel adalah komponen paling ringan untuk menampilkan teks bergaya. Ini mendukung semua atribut karakter, tetapi tidak memproses tautan yang dapat diklik secara otomatis (untuk itu diperlukan UITextView). UILabel ideal untuk judul, label, dan teks pendek dengan pemformatan.

UITextView dengan tautan

UITextView memproses NSLinkAttributeName dan menampilkan tautan sebagai elemen interaktif. Untuk mengaktifkan fungsionalitas ini, atur isSelectable = true dan isEditable = false. Saat tautan diklik, delegasi menerima panggilan textView(_:shouldInteractWith:in:interaction:). UITextView juga mendukung NSTextAttachment untuk gambar di dalam teks.

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

Setelah mengkonfigurasi isSelectable dan isEditable, area teks berperilaku seperti blok teks statis, tetapi tautan tetap aktif. Delegasi UITextViewDelegate mengelola perilaku saat diklik.

Integrasi dengan Core Text

Core Text adalah framework tingkat rendah Apple untuk rendering teks yang bekerja langsung dengan NSAttributedString. Tidak seperti UIKit, Core Text tidak menggunakan NSAttributedString secara langsung sebagai objek yang ditampilkan, tetapi mengonversinya menjadi CTFramesetter, kemudian CTFrame, dan merendernya dalam konteks Core Graphics. Ini memberikan kontrol penuh atas penempatan baris dan glyph.

Penggunaan Core Text dibenarkan untuk tata letak teks kustom: kolom, aliran di sekitar gambar, rotasi teks, pemutusan baris tidak standar. NSMutableParagraphStyle Core Text menyertakan atribut yang tidak ada di UIKit: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode dengan mode tambahan.

Konversi antara UIKit dan Core Text

NSAttributedString ditransfer dengan mulus antara UIKit dan Core Text, karena kedua framework bekerja dengan tipe yang sama. Atribut UIKit (NSFontAttributeName, NSForegroundColorAttributeName) secara otomatis dikenali oleh Core Text dan sebaliknya — atribut Core Text (kCTFontAttributeName) dibaca oleh UIKit. Ini memungkinkan penggunaan UIKit untuk tugas sederhana dan Core Text untuk rendering kustom pada objek NSAttributedString yang sama.

Pertanyaan yang sering diajukan

Apa perbedaan NSAttributedString dengan NSString?

NSString hanya menyimpan teks tanpa informasi gaya. NSAttributedString melengkapi teks dengan kamus atribut untuk setiap rentang karakter. Saat diteruskan ke UILabel melalui properti text, NSString ditampilkan sebagai teks biasa. Saat meneruskan NSAttributedString melalui properti attributedText, semua atribut diterapkan: font, warna, dan spasi yang berbeda dalam satu string.

Bagaimana cara menambahkan beberapa atribut ke satu rentang?

Gunakan metode addAttributes(_:range:) dengan kamus atribut: addAttributes([.font: font, .foregroundColor: color], range: range). Untuk menambahkan atau mengubah satu atribut, gunakan addAttribute(_:value:range:). Metode setAttributes mengganti semua atribut yang ada dalam rentang dengan yang baru.

Bagaimana cara mengubah spasi antar baris di NSAttributedString?

Buat NSMutableParagraphStyle, atur properti lineSpacing, lalu teruskan sebagai nilai atribut NSParagraphStyleAttributeName. Untuk kontrol penuh, tersedia juga minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode, dan alignment. ParagraphStyle adalah satu-satunya cara untuk mengontrol spasi antar baris.

Apakah atribut berfungsi di SwiftUI?

Ya, SwiftUI mendukung NSAttributedString melalui Text(attributedString:) di iOS 15+. Di versi yang lebih lama, gunakan UIViewRepresentable dengan UILabel atau UITextView. SwiftUI juga menyediakan tipe AttributedString sendiri (SwiftUI, bukan Foundation) untuk pemformatan deklaratif dengan sintaks mirip Markdown.

Bagaimana cara menghitung ukuran NSAttributedString?

Gunakan metode boundingRect(with:options:context:), yang mengembalikan CGRect yang diperlukan untuk menampilkan string dengan atribut yang ditentukan. Parameter options: [.usesLineFragmentOrigin, .usesFontLeading] memperhitungkan spasi antar baris dan metrik font. Untuk UILabel dengan jumlah baris terbatas, gunakan sizeThatFits.

Kesimpulan

  • NSAttributedString — kelas Foundation untuk menata teks melalui kamus atribut di iOS
  • Atribut mencakup font (UIFont), warna (UIColor), garis bawah, bayangan, dan pengaturan paragraf
  • NSMutableAttributedString — versi dinamis dengan penambahan dan penghapusan atribut
  • addAttributes(_:range:) menerapkan kamus atribut ke rentang karakter
  • NSParagraphStyle mengontrol spasi antar baris, perataan, dan indentasi
  • UILabel, UITextView, UITextField mendukung attributedText untuk menampilkan gaya
  • Core Text menggunakan NSAttributedString yang sama untuk rendering tingkat rendah

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga