Saya menggunakan contoh UIWebView
untuk memproses beberapa teks dan warna dengan benar, itu memberikan hasilnya sebagai HTML tetapi bukan menampilkannya di UIWebView
Saya ingin menampilkannya menggunakan Core Text
dengan NSAttributedString
.
Saya dapat membuat dan menggambar NSAttributedString
tetapi saya tidak yakin bagaimana saya dapat mengkonversi dan memetakan HTML ke string yang dikaitkan.
Saya mengerti bahwa di bawah Mac OS X NSAttributedString
memiliki initWithHTML:
metode tetapi ini hanya tambahan Mac dan tidak tersedia untuk iOS.
Saya juga tahu bahwa ada pertanyaan serupa dengan ini tetapi tidak punya jawaban, saya pikir saya akan mencoba lagi dan melihat apakah ada yang telah menciptakan cara untuk melakukan ini dan jika demikian, jika mereka dapat membagikannya.
Jawaban:
Di iOS 7, UIKit menambahkan
initWithData:options:documentAttributes:error:
metode yang dapat menginisialisasiNSAttributedString
menggunakan HTML, misalnya:Dalam Swift:
sumber
Ada tambahan open source yang sedang dikerjakan untuk NSAttributedString oleh Oliver Drobnik di Github. Ini menggunakan NSScanner untuk penguraian HTML.
sumber
Membuat NSAttributedString dari HTML harus dilakukan di utas utama!
Pembaruan: Ternyata rendering NSAttributedString HTML bergantung pada WebKit di bawah tenda, dan harus dijalankan pada utas utama atau terkadang aplikasi itu akan macet dengan SIGTRAP .
Log kecelakaan baru:
Di bawah ini adalah ekstensi Swift 2 String yang aman untuk keamanan :
Pemakaian:
Keluaran:
sumber
Ekstensi penginisialisasi cepat di NSAttributedString
Kecenderungan saya adalah menambahkan ini sebagai ekstensi
NSAttributedString
daripadaString
. Saya mencobanya sebagai ekstensi statis dan penginisialisasi. Saya lebih suka initializer yang saya sertakan di bawah.Cepat 4
Cepat 3
Contoh
sumber
guard ... NSMutableAttributedString(data:...
dengantry self.init(data:...
(dan tambahkanthrows
ke init)Ini adalah
String
ekstensi yang ditulis dalam Swift untuk mengembalikan string HTML sebagaiNSAttributedString
.Menggunakan,
Di atas, saya sengaja menambahkan unicode \ u2022 untuk menunjukkan bahwa ia membuat unicode dengan benar.
Sepele: Pengkodean default yang
NSAttributedString
digunakan adalahNSUTF16StringEncoding
(bukan UTF8!).sumber
Membuat beberapa modifikasi solusi Andrew dan perbarui kode ke Swift 3:
Kode ini sekarang menggunakan UITextView sebagai
self
dan dapat mewarisi font aslinya, ukuran font dan warna teksCatatan:
toHexString()
adalah ekstensi dari siniContoh penggunaan:
sumber
Versi Swift 3.0 Xcode 8
sumber
Cepat 4
Pemakaian
sumber
Satu-satunya solusi yang Anda miliki saat ini adalah mem-parsing HTML, membangun beberapa node dengan atribut point / font / etc yang diberikan, kemudian menggabungkannya menjadi NSAttributedString. Ini banyak pekerjaan, tetapi jika dilakukan dengan benar, dapat digunakan kembali di masa depan.
sumber
Solusi di atas benar.
Tetapi aplikasi wioll crash jika Anda menjalankannya di ios 8.1,2 atau 3.
Untuk menghindari kerusakan yang dapat Anda lakukan adalah: jalankan ini dalam antrian. Sehingga selalu di utas utama.
sumber
Penggunaan NSHTMLTextDocumentType lambat dan sulit untuk mengontrol gaya. Saya sarankan Anda untuk mencoba perpustakaan saya yang disebut Atributika. Ini memiliki parser HTML yang sangat cepat. Anda juga dapat memiliki nama tag dan menentukan gaya apa pun untuknya.
Contoh:
Anda dapat menemukannya di sini https://github.com/psharanda/Atributika
sumber
Swift 3 :
Coba ini :
Dan untuk menggunakan:
sumber
Ekstensi yang Bermanfaat
Terinspirasi oleh thread ini, pod, dan contoh ObjC Erica Sadun di iOS Gourmet Cookbook p.80, saya menulis perpanjangan
String
danNSAttributedString
untuk pergi bolak-balik antara HTML biasa-string dan NSAttributedStrings dan sebaliknya - di GitHub sini , yang Saya menemukan bermanfaat.The tanda tangan yang (sekali lagi, kode penuh dalam Intisari sebuah, link di atas):
sumber
dengan font
sebagai alternatif Anda dapat menggunakan versi-versi ini dari mana dan mengatur font pada UILabel setelah pengaturan attributedString
sumber
Konversi bawaan selalu menetapkan warna teks ke UIColor.black, bahkan jika Anda meneruskan kamus atribut dengan .forgroundColor diatur ke yang lain. Untuk mendukung mode DARK di iOS 13, coba versi ekstensi ini di NSAttributedString.
sumber