2017-01-27 2 views
-1

So habe ich eine UITextView mit etwas Text und ich möchte jedes Mal der Benutzer eingibt, zum Beispiel das Wort "während", nachdem es geschrieben wurde, sollte es in lila ändern. Außerdem habe ich ein anderes UITextView, um nur Inhalte anzuzeigen, keine Benutzerinteraktion aktiviert, und ich möchte, dass jedes Mal, wenn die Ansicht erscheint, alle "while" -Wörter ebenfalls violett sind. Wie mache ich das? Kannst du mir bitte helfen? Vielen Dank!Programmatisch ändern einige Worte 'Farbe in einem UITextView

Hier ist, was ich versucht habe, so weit:

let initialText = textView.text! 
let string_to_color = "while" 
let range = (initialText as NSString).range(of: string_to_color) 
let attribute = NSMutableAttributedString.init(string: initialText) 
attribute.addAttribute(NSForegroundColorAttributeName, value: UIColor.purple, range: range) 
textView.attributedText = attribute 

Aber es Farben nur das erste Wort. Dies ist für das Textfeld Benutzerinteraktion deaktiviert. Ich habe nicht herausgefunden, wie es für das Textfeld funktioniert, das die Wörter enthält, die der Benutzer eingibt.

+0

Warum der Downvote? –

+0

Nicht ich, aber Sie zeigen keinen Code oder was Sie bereits versucht haben. Suchen Sie nach der 'attributeText' -Eigenschaft von' UITextView'. –

+0

wahrscheinlich, weil Ihre Frage nicht sehr gut ist. Alles, was Sie getan haben, ist, jemanden um etwas Code für Sie zu schreiben, nicht um ein bestimmtes Problem zu lösen. Sie zeigen keinen Code an oder erklären, was Sie versucht haben und was falsch läuft. Versuchen Sie, diese http://stackoverflow.com/help/how-to-ask zu lesen – Russell

Antwort

3

Sie sind nicht die Reichweite korrekt bekommen, hier ist ein Beispiel für zugeschrieben Strings in Swift mit 3,0:

// get initial text as a String type (you will get this from your textview) 
let initialText = "Swift Attributed String" 

// create an attribute for the text color, I chose blue color 
let myAttribute = [ NSForegroundColorAttributeName: UIColor.blue ] 

// create the attributed string and add the blue color attribute 
let myString = NSMutableAttributedString(string: initialText, attributes: myAttribute) 

// range starting at location 6 with a lenth of 10: "Attributed" 
var myRange = NSRange(location: 6, length: 10) 

// OR get range of specific string in initialText 
let newRange = (initialText as NSString).range(of: "Attributed") 

// change the range of the word "Attributed" to have red text color 
myString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: newRange) 

// create another attribute for highlighting 
let anotherAttribute = [ NSBackgroundColorAttributeName: UIColor.yellow ] 
// set the range of the "Attributed" part of the string to a yellow highlight 
myString.addAttributes(anotherAttribute, range: newRange) 

Sie diese Strategie zu tun, verwenden kann, was auch immer die Formatierung Sie mit Ihrem String tun müssen. Stellen Sie nur sicher, dass der Bereich, den Sie erhalten, korrekt ist.

+0

Danke! Und wie soll ich es einstellen, wenn der Benutzer ein bestimmtes Wort eingibt und sofort auf diese Farbe wechselt? –

+0

Ich denke, das könnte entweder schwierig oder einfach sein, je nachdem, was Sie brauchen. Wenn das Wort lila ist nur die Buchstaben "lila" irgendwo auf dem Bildschirm, dann alles, was Sie tun müssen, wenn der Text ändert, finden Sie alle Instanzen von "lila" und ändern Sie die Farbe. Wenn Sie nur diskrete Wörter wollen, dann müssen Sie nach 'lila' mit einer ganzen Reihe von Nicht-Buchstaben-Zeichen auf beiden Seiten - Anfang/Ende der Textansicht, Leerzeichen, Komma, etc. – Russell

+0

Ich habe den Code aktualisiert zeigen Sie, wie Sie den Bereich basierend auf einer bestimmten Zeichenfolge in Ihrer ursprünglichen Zeichenfolge erhalten –

Verwandte Themen