Bagaimana mungkin memasukkan teks tebal dan tidak tebal dalam uiLabel?
Saya lebih suka tidak menggunakan UIWebView .. Saya juga sudah membaca ini mungkin dapat menggunakan NSAttributedString tapi saya tidak tahu cara menggunakannya. Ada ide?
Apple mencapai ini di beberapa aplikasi mereka; Contoh Screenshot:
Terima kasih! - Dom
ios
objective-c
swift
uilabel
nsattributedstring
DomMaiocchi
sumber
sumber
Jawaban:
Memperbarui
Di Swift kita tidak harus berurusan dengan hal-hal lama iOS5 selain sintaks lebih pendek sehingga semuanya menjadi sangat sederhana:
Cepat 5
Cepat 3
Pemakaian:
Bonus: Internasionalisasi
Beberapa orang berkomentar tentang internasionalisasi. Saya pribadi berpikir ini di luar ruang lingkup pertanyaan ini, tetapi untuk tujuan pengajaran ini adalah bagaimana saya akan melakukannya
Hasil (Dengan asumsi Bahasa Inggris dan Jepang Localizable.strings tersedia)
Jawaban sebelumnya untuk iOS6 dan yang lebih baru (Objective-C masih berfungsi):
Di iOS6
UILabel
,UIButton
,UITextView
,UITextField
, dukungan dikaitkan string yang berarti kita tidak perlu membuatCATextLayer
sebagai penerima kami untuk string dikaitkan. Selanjutnya untuk membuat string yang dikaitkan kita tidak perlu bermain dengan CoreText lagi :) Kami memiliki kelas-kelas baru di obj-c Foundation.framework likeNSParagraphStyle
dan konstanta lain yang akan membuat hidup kita lebih mudah. Yay!Jadi, jika kita memiliki string ini:
Kami hanya perlu membuat string yang dikaitkan:
Ada beberapa posting blog pengantar yang baik di sini dari orang-orang di invasivecode yang menjelaskan dengan lebih banyak contoh penggunaan
NSAttributedString
, cari "Pengantar NSAttributedString untuk iOS 6" dan "string yang dikaitkan untuk iOS menggunakan Interface Builder" :)PS: Di atas kode itu harus berfungsi tetapi itu dikompilasi otak. Semoga cukup :)
Jawaban Lama untuk iOS5 dan di bawah
Gunakan CATextLayer dengan NSAttributedString! jauh lebih ringan dan lebih sederhana dari 2 UILabel. (iOS 3.2 dan lebih tinggi)
Contoh.
Jangan lupa untuk menambahkan kerangka kerja QuartzCore (diperlukan untuk CALayers), dan CoreText (diperlukan untuk string yang dikaitkan.)
Contoh di bawah ini akan menambahkan sublayer ke bilah alat pengendali navigasi. à la Mail.app di iPhone. :)
Dalam contoh ini saya hanya memiliki dua jenis font (tebal dan normal) tetapi Anda juga bisa memiliki ukuran font yang berbeda, warna yang berbeda, miring, bergaris bawah, dll. Lihatlah NSAttributedString / NSMutableAttributedString dan CoreText atribut kunci kunci string .
Semoga ini bisa membantu
sumber
[NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]
menjadi@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
.{
), bukan kurung siku ([
).Coba kategori di UILabel:
Begini cara menggunakannya:
Dan inilah kategorinya
UILabel + Boldify.h
UILabel + Boldify.m
Perhatikan bahwa ini hanya akan berfungsi di iOS 6 dan yang lebih baru. Itu hanya akan diabaikan di iOS 5 dan sebelumnya.
sumber
@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}
Saya[UIFont boldSystemFontOfSize:self.font.pointSize]
TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
Itu mudah dilakukan di Interface Builder :
1) membuat UILabel Dikaitkan di Atribut Inspektur
2) pilih bagian kalimat yang ingin Anda buat tebal
3) ubah fontnya (atau huruf tebal dari font yang sama) di pemilih font
Itu saja!
sumber
Ada kategori berdasarkan kategori bbrame. Ini berfungsi serupa, tetapi memungkinkan Anda untuk mencetak tebal yang sama
UILabel
beberapa kali dengan hasil kumulatif yang sama.UILabel + Boldify.h
UILabel + Boldify.m
Dengan koreksi ini Anda dapat menggunakannya beberapa kali, misalnya:
akan muncul dengan: " Diperbarui: 2012/10/14 21:59 PM ".
sumber
Ini bekerja untuk saya:
Untuk versi Swift: Lihat Di Sini
sumber
Saya sudah mengadopsi jawaban Crazy Yoghurt untuk ekstensi swift.
Mungkin tidak ada konversi yang baik antara Range dan NSRange, tetapi saya tidak menemukan sesuatu yang lebih baik.
sumber
boldSubstring(_:)
untukvar range = text.string.range(of: substr, options: .caseInsensitive)
ke string make dengan kapitalisasi yang berbeda juga berani.Lihat TTTAttributedLabel . Ini adalah pengganti drop-in untuk UILabel yang memungkinkan Anda untuk memadukan font dan warna dalam satu label dengan menetapkan NSAttributedString sebagai teks untuk label tersebut.
sumber
Dalam hal ini Anda bisa mencoba,
sumber
Untuk membuat teks tebal dan menggarisbawahi dalam UILabel. Cukup tambahkan baris berikut dalam kode Anda.
sumber
Gunakan kode di bawah ini. Saya harap ini membantu Anda.
sumber
Swift 4:
sumber
Semoga yang ini memenuhi kebutuhan Anda. Berikan string untuk diproses sebagai input dan berikan kata-kata yang harus dicetak tebal / berwarna sebagai input.
Terima kasih. Selamat Coding.
sumber
Tidak perlu untuk NSRange dengan kode berikut yang baru saja saya terapkan dalam proyek saya (dalam Swift):
sumber
Jika Anda ingin membuat penggunaan string yang dikaitkan lebih mudah, coba gunakan Attributed String Creator, yang akan menghasilkan kode untuk Anda. https://itunes.apple.com/us/app/attributed-string-creator/id730928349
sumber