Bisakah saya menambahkan target di atasnya. Thnaks
UserDev
Saya baru saja menambahkan ekstensi Anda ke proyek saya! Terima kasih!
Zeb
Kategori bagus untuk UILabel. Terima kasih banyak. Ini harus menjadi jawaban yang diterima.
Pradeep Reddy Kypa
63
Saya telah melakukan ini dengan membuat categoryuntukNSMutableAttributedString
-(void)setColorForText:(NSString*) textToFind withColor:(UIColor*) color
{NSRange range =[self.mutableString rangeOfString:textToFind options:NSCaseInsensitiveSearch];if(range.location !=NSNotFound){[self addAttribute:NSForegroundColorAttributeNamevalue:color range:range];}}
Gunakan seperti itu
-(void) setColoredLabel
{NSMutableAttributedString*string=[[NSMutableAttributedString alloc] initWithString:@"Here is a red blue and green text"];[string setColorForText:@"red" withColor:[UIColor redColor]];[string setColorForText:@"blue" withColor:[UIColor blueColor]];[string setColorForText:@"green" withColor:[UIColor greenColor]];
mylabel.attributedText =string;}
func setColoredLabel(){letstring=NSMutableAttributedString(string:"Here is a red blue and green text")string.setColorForText("red",with:#colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1))string.setColorForText("blue",with:#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1))string.setColorForText("green",with:#colorLiteral(red: 0.3411764801, green: 0.6235294342, blue: 0.1686274558, alpha: 1))
mylabel.attributedText =string}
SWIFT 4 @ kj13 Terima kasih telah memberi tahu
// If no text is send, then the style will be applied to full text
func setColorForText(_ textToFind:String?,with color:UIColor){let range:NSRange?iflet text = textToFind{
range =self.mutableString.range(of: text, options:.caseInsensitive)}else{
range =NSMakeRange(0,self.length)}if range!.location !=NSNotFound{
addAttribute(NSAttributedStringKey.foregroundColor,value: color, range: range!)}}
Saya telah melakukan lebih banyak eksperimen dengan atribut dan di bawah ini adalah hasilnya, berikut adalah SOURCECODE
Anda perlu membuat Kategori baru untuk NSMutableAttributedString dengan metode ... bagaimanapun saya menambahkan sampel ini ke github, Anda dapat mengambil dan memeriksanya github.com/anoop4real/NSMutableAttributedString-Color
anoop4real
Tetapi saya perlu mengatur warna semua alfabet dengan peka dalam string .... seperti semua "e" dalam warna merah dari seluruh string
Ravi Ojha
@Interface tidak terlihat untuk 'NSMutableAttributedString' mendeklarasikan selector 'setColorForText: withColor:'
ekashking
1
Saya mendapat kesalahan 'Use of unresolved identifier' NSForegroundColorAttributeName 'dengan Swift4.1, tetapi saya mengganti' NSForegroundColorAttributeName 'menjadi' NSAttributedStringKey.foregroundColor 'dan membangun dengan benar.
kj13
1
@ kj13 Terima kasih telah memberi tahu, saya memperbarui jawabannya dan menambahkan beberapa gaya lagi
//NSString *myString = @"I have to replace text 'Dr Andrew Murphy, John Smith' ";NSString*myString =@"Not a member?signin";//Create mutable string from original oneNSMutableAttributedString*attString =[[NSMutableAttributedString alloc] initWithString:myString];//Fing range of the string you want to change colour//If you need to change colour in more that one place just repeat itNSRange range =[myString rangeOfString:@"signin"];[attString addAttribute:NSForegroundColorAttributeNamevalue:[UIColor colorWithRed:(63/255.0) green:(163/255.0) blue:(158/255.0) alpha:1.0] range:range];//Add it to the label - notice its not text property but it's attributeText
_label.attributedText = attString;
Anda hanya perlu membangun NSAttributedString. Pada dasarnya ada dua cara:
Tambahkan potongan teks dengan atribut yang sama - untuk setiap bagian buat satu NSAttributedStringcontoh dan tambahkan ke satuNSMutableAttributedString
Buat teks atribut dari string biasa dan kemudian tambahkan atribut untuk rentang tertentu - temukan rentang nomor Anda (atau apa pun) dan terapkan atribut warna berbeda pada itu.
Memiliki UIWebView atau lebih dari satu UILabel dapat dianggap berlebihan untuk situasi ini.
Saran saya adalah menggunakan TTTAttributedLabel yang merupakan pengganti drop-in untuk UILabel yang mendukung NSAttributedString . Ini berarti Anda dapat dengan mudah menerapkan gaya yang berbeda ke rentang yang berbeda dalam sebuah string.
Untuk menampilkan teks pendek berformat yang tidak perlu dapat diedit, Teks Inti adalah caranya. Ada beberapa proyek sumber terbuka untuk label yang menggunakan NSAttributedStringdan Teks Inti untuk rendering. Lihat CoreTextAttributedLabel atau OHAttributedLabel misalnya.
NSAttributedStringadalah cara untuk pergi. Pertanyaan berikut memiliki jawaban yang bagus yang menunjukkan kepada Anda bagaimana melakukannya Bagaimana Anda menggunakan NSAttributedString
JTAttributedLabel (oleh mystcolor) memungkinkan Anda menggunakan dukungan string yang diatribusikan di UILabel di bawah iOS 6 dan pada saat yang sama kelas JTAttributedLabel di bawah iOS 5 melalui JTAutoLabel-nya.
Hai, bagaimana cara melakukannya jika saya ingin menambahkan dua colorString yang berbeda? Saya mencoba menggunakan contoh Anda dan menambahkan satu sama lain, tetapi itu masih hanya mewarnai salah satunya ..
Masalahnya adalah jika kedua string itu sama, hanya mewarnai salah satunya, lihat di sini: pastebin.com/FJZJTpp3 . Anda memiliki perbaikan untuk ini juga?
Erik Auranaune
2
Swift 4 ke atas: Terinspirasi oleh solusi anoop4real , berikut adalah ekstensi String yang dapat digunakan untuk menghasilkan teks dengan 2 warna berbeda.
Jawaban saya juga memiliki opsi untuk mewarnai semua kemunculan teks tidak hanya satu kemunculannya: "wa ba wa ba dubdub", Anda dapat mewarnai semua kemunculan wa tidak hanya kemunculan pertama seperti jawaban yang diterima.
extension NSMutableAttributedString{
func setColorForText(_ textToFind:String,with color:UIColor){let range =self.mutableString.range(of: textToFind, options:.caseInsensitive)if range.location !=NSNotFound{
addAttribute(NSForegroundColorAttributeName,value: color, range: range)}}
func setColorForAllOccuranceOfText(_ textToFind:String,with color:UIColor){let inputLength =self.string.count
let searchLength = textToFind.count
var range =NSRange(location:0, length:self.length)while(range.location !=NSNotFound){
range =(self.stringasNSString).range(of: textToFind, options:[], range: range)if(range.location !=NSNotFound){self.addAttribute(NSForegroundColorAttributeName,value: color, range:NSRange(location: range.location, length: searchLength))
range =NSRange(location: range.location + range.length, length: inputLength -(range.location + range.length))}}}}
Sekarang Anda bisa melakukan ini:
let message =NSMutableAttributedString(string:"wa ba wa ba dubdub")
message.setColorForText(subtitle,with:UIColor.red)// or the below one if you want all the occurrence to be colored
message.setColorForAllOccuranceOfText("wa",with:UIColor.red)// then you set this attributed string to your label :
lblMessage.attributedText = message
Untuk pengguna Xamarin, saya memiliki metode C # statis di mana saya mengirimkan array string, array UIColours dan array UIFonts (panjangnya harus sama). String yang dikaitkan kemudian diteruskan kembali.
Lihat:
publicstaticNSMutableAttributedStringGetFormattedText(string[] texts,UIColor[] colors,UIFont[] fonts){NSMutableAttributedString attrString =newNSMutableAttributedString(string.Join("", texts));int position =0;for(int i =0; i < texts.Length; i++){
attrString.AddAttribute(newNSString("NSForegroundColorAttributeName"), colors[i],newNSRange(position, texts[i].Length));var fontAttribute =newUIStringAttributes{Font= fonts[i]};
attrString.AddAttributes(fontAttribute,newNSRange(position, texts[i].Length));
position += texts[i].Length;}return attrString;}
Sepertinya XCode 11.0 merusak editor Teks Atribut. Jadi, saya mencoba menggunakan TextEdit untuk membuat teks lalu menempelkannya ke Xcode dan ternyata bekerja dengan sangat baik.
Ini berfungsi hanya dengan satu warna berbeda dalam teks yang sama tetapi Anda dapat menyesuaikannya dengan mudah ke lebih banyak warna dalam kalimat yang sama.
Jawaban:
Cara melakukannya adalah dengan menggunakan
NSAttributedString
seperti ini:Saya membuat
UILabel
ekstensi untuk melakukannya .sumber
Saya telah melakukan ini dengan membuat
category
untukNSMutableAttributedString
Gunakan seperti itu
SWIFT 3
PEMAKAIAN
SWIFT 4 @ kj13 Terima kasih telah memberi tahu
Saya telah melakukan lebih banyak eksperimen dengan atribut dan di bawah ini adalah hasilnya, berikut adalah SOURCECODE
Inilah hasilnya
sumber
Ini dia
sumber
Cepat 4
Hasil
Cepat 3
Hasil:
sumber
sumber
Sejak iOS 6 , UIKit mendukung menggambar string yang diatribusikan, jadi tidak diperlukan ekstensi atau penggantian.
Dari
UILabel
:Anda hanya perlu membangun
NSAttributedString
. Pada dasarnya ada dua cara:Tambahkan potongan teks dengan atribut yang sama - untuk setiap bagian buat satu
NSAttributedString
contoh dan tambahkan ke satuNSMutableAttributedString
Buat teks atribut dari string biasa dan kemudian tambahkan atribut untuk rentang tertentu - temukan rentang nomor Anda (atau apa pun) dan terapkan atribut warna berbeda pada itu.
sumber
Anups menjawab dengan cepat. Dapat digunakan kembali dari kelas mana pun.
Dalam file cepat
Dalam Beberapa pengontrol tampilan
sumber
Memiliki UIWebView atau lebih dari satu UILabel dapat dianggap berlebihan untuk situasi ini.
Saran saya adalah menggunakan TTTAttributedLabel yang merupakan pengganti drop-in untuk UILabel yang mendukung NSAttributedString . Ini berarti Anda dapat dengan mudah menerapkan gaya yang berbeda ke rentang yang berbeda dalam sebuah string.
sumber
Untuk menampilkan teks pendek berformat yang tidak perlu dapat diedit, Teks Inti adalah caranya. Ada beberapa proyek sumber terbuka untuk label yang menggunakan
NSAttributedString
dan Teks Inti untuk rendering. Lihat CoreTextAttributedLabel atau OHAttributedLabel misalnya.sumber
NSAttributedString
adalah cara untuk pergi. Pertanyaan berikut memiliki jawaban yang bagus yang menunjukkan kepada Anda bagaimana melakukannya Bagaimana Anda menggunakan NSAttributedStringsumber
JTAttributedLabel (oleh mystcolor) memungkinkan Anda menggunakan dukungan string yang diatribusikan di UILabel di bawah iOS 6 dan pada saat yang sama kelas JTAttributedLabel di bawah iOS 5 melalui JTAutoLabel-nya.
sumber
Ada solusi Swift 3.0
Dan ada contoh panggilan:
sumber
Swift 4 ke atas: Terinspirasi oleh solusi anoop4real , berikut adalah ekstensi String yang dapat digunakan untuk menghasilkan teks dengan 2 warna berbeda.
Contoh berikut mengubah warna tanda bintang menjadi merah sambil mempertahankan warna label asli untuk teks yang tersisa.
sumber
Jawaban saya juga memiliki opsi untuk mewarnai semua kemunculan teks tidak hanya satu kemunculannya: "wa ba wa ba dubdub", Anda dapat mewarnai semua kemunculan wa tidak hanya kemunculan pertama seperti jawaban yang diterima.
Sekarang Anda bisa melakukan ini:
sumber
Untuk pengguna Xamarin, saya memiliki metode C # statis di mana saya mengirimkan array string, array UIColours dan array UIFonts (panjangnya harus sama). String yang dikaitkan kemudian diteruskan kembali.
Lihat:
sumber
Dalam kasus saya, saya menggunakan Xcode 10.1. Ada opsi untuk beralih antara teks biasa dan teks Atribut dalam teks Label di Pembuat Antarmuka
Semoga ini dapat membantu orang lain ..!
sumber
sumber
Solusi saya sendiri adalah membuat metode seperti berikut ini:
Ini berfungsi hanya dengan satu warna berbeda dalam teks yang sama tetapi Anda dapat menyesuaikannya dengan mudah ke lebih banyak warna dalam kalimat yang sama.
sumber
Dengan menggunakan kode di bawah ini Anda dapat mengatur beberapa warna berdasarkan kata.
sumber
SwiftRichString
bekerja dengan sempurna! Anda dapat menggunakan+
untuk menggabungkan dua string yang dikaitkansumber