Apakah ada cara untuk menggunakan dua, atau bahkan tiga warna font dalam satu label di iOS?
Jika teks "halo, apa kabar" digunakan sebagai contoh, "halo" akan berwarna biru, dan "apa kabar" akan berwarna hijau?
Apakah ini mungkin, tampaknya lebih mudah daripada membuat banyak label?
Jawaban:
Referensi dari sini.
Pertama-tama inisialisasi NSString dan NSMutableAttributedString seperti di bawah ini.
var myString:NSString = "I AM KIRIT MODI" var myMutableString = NSMutableAttributedString()
Di ViewDidLoad
override func viewDidLoad() { myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4)) // set label Attribute labName.attributedText = myMutableString super.viewDidLoad() }
KELUARAN
WARNA GANDA
Tambahkan kode baris di bawah ini di ViewDidLoad Anda untuk mendapatkan beberapa warna dalam sebuah string.
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location:10,length:5))
OUTPUT berbagai warna
Cepat 4
var myMutableString = NSMutableAttributedString(string: str, attributes: [NSAttributedStringKey.font :UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:2,length:4))
sumber
Untuk @Hems Moradiya
let attrs1 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.greenColor()] let attrs2 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.whiteColor()] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.appendAttributedString(attributedString2) self.lblText.attributedText = attributedString1
Cepat 4
let attrs1 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.green] let attrs2 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.white] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.append(attributedString2) self.lblText.attributedText = attributedString1
Cepat 5
let attrs1 = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor : UIColor.green] let attrs2 = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor : UIColor.white] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.append(attributedString2) self.lblText.attributedText = attributedString1
sumber
Cepat 4
Dengan menggunakan fungsi ekstensi berikut, Anda dapat langsung menyetel atribut warna ke string yang diatribusikan dan menerapkan hal yang sama pada label Anda.
extension NSMutableAttributedString { func setColorForText(textForAttribute: String, withColor color: UIColor) { let range: NSRange = self.mutableString.range(of: textForAttribute, options: .caseInsensitive) // Swift 4.2 and above self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) // Swift 4.1 and below self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range) } }
Coba ekstensi di atas, menggunakan label:
let label = UILabel() label.frame = CGRect(x: 60, y: 100, width: 260, height: 50) let stringValue = "stackoverflow" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue) attributedString.setColorForText(textForAttribute: "stack", withColor: UIColor.black) attributedString.setColorForText(textForAttribute: "over", withColor: UIColor.orange) attributedString.setColorForText(textForAttribute: "flow", withColor: UIColor.red) label.font = UIFont.boldSystemFont(ofSize: 40) label.attributedText = attributedString self.view.addSubview(label)
Hasil:
sumber
Jawaban yang Diperbarui untuk Swift 4
Anda dapat dengan mudah menggunakan html di dalam properti atributedText dari UILabel untuk dengan mudah melakukan berbagai pemformatan teks.
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
Jawaban yang Diperbarui untuk Swift 2
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" let encodedData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
sumber
Berikut solusi untuk Swift 5
let label = UILabel() let text = NSMutableAttributedString() text.append(NSAttributedString(string: "stack", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])); text.append(NSAttributedString(string: "overflow", attributes: [NSAttributedString.Key.foregroundColor: UIColor.gray])) label.attributedText = text
sumber
Jawaban rakeshbs yang digunakan untuk membuat ekstensi di Swift 2:
// StringExtension.swift import UIKit import Foundation extension String { var attributedStringFromHtml: NSAttributedString? { do { return try NSAttributedString(data: self.dataUsingEncoding(NSUTF8StringEncoding)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) } catch _ { print("Cannot create attributed String") } return nil } }
Pemakaian:
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" label.attributedText = htmlString.attributedStringFromHtml
Atau bahkan untuk satu baris
label.attributedText = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>".attributedStringFromHtml
Hal yang baik tentang ekstensi ini adalah Anda akan memiliki
.attributedStringFromHtml
atribut untuk semuaString
di seluruh aplikasi Anda.sumber
UPDATE untuk SWIFT 5
func setDiffColor(color: UIColor, range: NSRange) { let attText = NSMutableAttributedString(string: self.text!) attText.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) attributedText = attText }
SWIFT 3
Dalam kode saya, saya membuat ekstensi
import UIKit import Foundation extension UILabel { func setDifferentColor(string: String, location: Int, length: Int){ let attText = NSMutableAttributedString(string: string) attText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueApp, range: NSRange(location:location,length:length)) attributedText = attText } }
dan ini untuk digunakan
override func viewDidLoad() { super.viewDidLoad() titleLabel.setDifferentColor(string: titleLabel.text!, location: 5, length: 4) }
sumber
Saya suka seperti ini
let yourAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)] let yourOtherAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25)] let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes) let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes) let combination = NSMutableAttributedString() combination.append(partOne) combination.append(partTwo)
sumber
Menggunakan
NSMutableAttributedString
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))
Lihat detail selengkapnya di sini menggunakan string yang diatribusikan dengan cepat
sumber
Swift 3.0.0
let myMutableString = NSMutableAttributedString( string: "your desired text", attributes: [:]) myMutableString.addAttribute( NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange( location:6, length:7))
Untuk lebih banyak warna, Anda bisa terus menambahkan atribut ke string yang bisa berubah. Lebih banyak contoh di sini .
sumber
Swift 4 Ekstensi UILabel
Dalam kasus saya, saya harus dapat mengatur warna / font yang berbeda dalam label sesering mungkin, jadi saya membuat ekstensi UILabel menggunakan ekstensi NSMutableAttributedString Krunal .
func highlightWords(phrases: [String], withColor: UIColor?, withFont: UIFont?) { let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.text!) for phrase in phrases { if withColor != nil { attributedString.setColorForText(textForAttribute: phrase, withColor: withColor!) } if withFont != nil { attributedString.setFontForText(textForAttribute: phrase, withFont: withFont!) } } self.attributedText = attributedString }
Ini bisa digunakan seperti ini:
yourLabel.highlightWords(phrases: ["hello"], withColor: UIColor.blue, withFont: nil) yourLabel.highlightWords(phrases: ["how are you"], withColor: UIColor.green, withFont: nil)
sumber
Gunakan cocoapod Prestyler :
Prestyle.defineRule("*", Color.blue) Prestyle.defineRule("_", Color.red) label.attributedText = "*This text is blue*, _but this one is red_".prestyled()
sumber
Contoh Swift 3 menggunakan versi HTML.
let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
sumber
Berikut adalah kode yang mendukung Swift versi terbaru pada Maret 2017.
Swift 3.0.0
Di sini saya telah membuat kelas dan metode Helper untuk
public class Helper { static func GetAttributedText(inputText:String, location:Int,length:Int) -> NSMutableAttributedString { let attributedText = NSMutableAttributedString(string: inputText, attributes: [NSFontAttributeName:UIFont(name: "Merriweather", size: 15.0)!]) attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0) , range: NSRange(location:location,length:length)) return attributedText } }
Di Parameter Metode, inputText: String - Teks Anda akan ditampilkan di lokasi label: Int - di mana gayanya harus berupa aplikasi, "0" sebagai awal string atau beberapa nilai yang valid sebagai posisi karakter dari panjang string: Int - Dari lokasi hingga berapa banyak karakter gaya ini berlaku.
Mengkonsumsi dengan metode lain:
self.dateLabel?.attributedText = Helper.GetAttributedText(inputText: "Date : " + (self.myModel?.eventDate)!, location:0, length: 6)
Keluaran:
Catatan: Warna UI dapat didefinisikan sebagai warna
UIColor.red
atau warna yang ditentukan pengguna sebagaiUIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0)
sumber
func MultiStringColor(first:String,second:String) -> NSAttributedString { let MyString1 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.PUREBLACK] let MyString2 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.GREENCOLOR] let attributedString1 = NSMutableAttributedString(string:first, attributes:MyString1) let attributedString2 = NSMutableAttributedString(string:second, attributes:MyString2) MyString1.append(MyString2) return MyString1 }
sumber
untuk menggunakan NSForegroundColorAttributeName ini dalam versi cepat yang lebih rendah, Anda bisa mendapatkan masalah pengenal yang belum terselesaikan, ubah di atas menjadi NSAttributedStringKey.foregroundColor .
yaitu, NSForegroundColorAttributeName == NSAttributedStringKey.foregroundColor
sumber
Swift 4.2.0
let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = NSTextAlignment.center var stringAlert = self.phoneNumber + "로\r로전송인증번호를입력해주세요" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringAlert, attributes: [NSAttributedString.Key.paragraphStyle:paragraphStyle, .font: UIFont(name: "NotoSansCJKkr-Regular", size: 14.0)]) attributedString.setColorForText(textForAttribute: self.phoneNumber, withColor: UIColor.init(red: 1.0/255.0, green: 205/255.0, blue: 166/255.0, alpha: 1) ) attributedString.setColorForText(textForAttribute: "로\r로전송인증번호를입력해주세요", withColor: UIColor.black) self.txtLabelText.attributedText = attributedString
Hasil
sumber
Jika Anda ingin menggunakan ini berkali-kali dalam aplikasi Anda, Anda dapat membuat ekstensi UILabel dan itu akan membuatnya lebih sederhana: -
Cepat 5
extension UILabel { func setSpannedColor (fullText : String , changeText : String ) { let strNumber: NSString = fullText as NSString let range = (strNumber).range(of: changeText) let attribute = NSMutableAttributedString.init(string: fullText) attribute.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red , range: range) self.attributedText = attribute } }
Gunakan label Anda: -
yourLabel = "Hello Test" yourLabel.setSpannedColor(fullText: totalLabel.text!, changeText: "Test")
sumber