2017-05-28 11 views
0

Ich möchte nur die Farbe eines Wortes in der Zeichenfolge meines Labels ändern.Farbe eines bestimmten Wortes in UILabel ändern

Was ich tun möchte, ist:

What I want to do is:

Wie Im Versuch zu tun:

Aber es funktioniert nicht, und es sagt: ‚NSMutableRLEArray replaceObjectsInRange: withobject: Länge :: Out von Grenzen '

Also brauche ich einen Rat, um diese einfache Sache zu tun, und ich brauche einen Trick, dies zu tun. Ihr könnt euren Weg schicken.

+0

Bitte senden Sie Ihren Code als Text, nicht als Bild. Sie können Code aus einem Bild nicht suchen oder referenzieren. – rmaddy

+0

@maddy mein schlecht, sorry. – Alper

Antwort

2

Versuchen Sie dies, Ihre attributierte Zeichenfolge hat keinen Wert, wenn Sie versuchen, den Bereich der Zeichenfolge zu erhalten. Sie müssen der attributierten Zeichenfolge vorher einen Zeichenfolgenwert geben. Sie

let descriptionLabel: UILabel = { 

     let label = UILabel() 

     // String variable containing the text. 
     let fullString = "mehmet alper tabak" 

     // Choose wwhat you want to be colored. 
     let coloredString = "alper" 

     // Get the range of the colored string. 
     let rangeOfColoredString = (fullString as NSString).range(of: coloredString) 

     // Create the attributedString. 
     let attributedString = NSMutableAttributedString(string:fullString) 
     attributedString.setAttributes([NSForegroundColorAttributeName: UIColor.red], 
           range: rangeOfColoredString) 
     label.attributedText = attributedString 
    return label 
    }() 

    descriptionLabel.frame = CGRect(x: 50, y: 50, width: 140, height: 100) 
    self.view.addSubview(descriptionLabel) 

Oder Sie können eine Erweiterung von UILabel tun.

extension UILabel { 

     func colorString(text: String?, coloredText: String?, color: UIColor? = .red) { 

     let attributedString = NSMutableAttributedString(string: text!) 
     let range = (text! as NSString).range(of: coloredText!) 
     attributedString.setAttributes([NSForegroundColorAttributeName: color!], 
           range: range) 
     self.attributedText = attributedString 
    } 

Um es zu verwenden.

 self.testLabel.colorString(text: "mehmet alper tabak", 
          coloredText: "alper") 
+0

Vielen Dank, das ist es. Jetzt habe ich kein Problem, und irgendwelche Fragezeichen in meinen Gedanken^_ ^ – Alper

0

Es ist außerhalb der Grenzen, weil myMutableString zu dem Zeitpunkt leer ist, an dem Sie versuchen, Attribute festzulegen. Versuchen Sie stattdessen:

+0

Vielen Dank für Ihre Antwort. Es funktionierte! Aber ich frage mich, hast du eine andere Lösung? Außer meinem Weg? – Alper

+0

Und was wäre eine statische Sache, wie "Welcome @username". In diesem Fall wäre seine Länge nicht spezifisch. – Alper

+0

attributierte Zeichenfolge erstellen 'attributierteString = NSAttributedString (Zeichenfolge: Benutzername, Attribute: attributiert)', an änderbare 'myMutableString.append (attributierteString)' –

0

attributedString1 erstellen mit ersten Farb

let attributedString1 = NSAttributedString(string: "robert plant ", attributes: [NSForegroundColorAttributeName: color1]) 

attributedString2 erstellen mit der zweiten Farbe

let attributedString1 = NSAttributedString(string: "with queen", attributes: [NSForegroundColorAttributeName: color2]) 

sie In den myMutableString

myMutableString.append(attributedString1) 
myMutableString.append(attributedString1) 
Verwandte Themen