Ich habe eine UITextView
mit vielen verschiedenen Wörtern nebeneinander. Wenn der Benutzer diesen Bildschirm betritt ich beginnen soll einige Worte hervorgehoben, zum Beispiel:Wie kann ich den Stil einiger Wörter in meinem UITextView einzeln in Swift ändern?
das erste, was er sieht, ist eine Wand aus Text:
one two three #four five six #seven eight nine ten
eleven #twelve thirteen fourteen fifteen sixteen
some other words #example test whatever #some thing
dann, nach einer Sekunde, das Wort four
würde Stil ändern (Farbe), so würde er sehen:
one two three #FOUR five six #seven eight nine ten
eleven #twelve thirteen fourteen fifteen sixteen
some other words #example test whatever #some thing
dann, nach einer Sekunde, würde ein anderes Wort markiert (und kommen bereits farbige four
):
one two three #FOUR five six #SEVEN eight nine ten
eleven #twelve thirteen fourteen fifteen sixteen
some other words #example test whatever #some thing
und so weiter. So nach ein paar Sekunden Benutzer würde sehen:
one two three #FOUR five six #SEVEN eight nine ten
eleven #TWELVE thirteen fourteen fifteen sixteen
some other words #EXAMPLE test whatever #SOME thing
und dann sollte der Text so bleiben. Wie kann ich das erreichen?
Ich dachte daran, Wörter durchzuschleifen und zu überprüfen, ob sie den vordefinierten Wörtern entsprechen, aber ich habe keine Ahnung, wie ich es beißen kann - können Sie mir dabei helfen?
===== EDIT
Also macht die Dinge einfacher für mich ich mit #
Symbol markierten Wörter markieren entschieden.
Ich habe Erweiterung alle Wörter hervorzuheben, die mit #
im Textview beginnen:
extension UITextView {
func formatTextInTextView() {
self.isScrollEnabled = false
let selectedRange = self.selectedRange
let text = self.text
let font = UIFont(name: "AppleSDGothicNeo-Light", size: 16.0)
let titleDict: NSDictionary = [NSFontAttributeName: font!]
// This will give me an attributedString with the desired font
let attributedString = NSMutableAttributedString(string: text!, attributes: titleDict as! [String : AnyObject])
let regex = try? NSRegularExpression(pattern: "#(\\w+)", options: [])
let matches = regex!.matches(in: text!, options: [], range: NSMakeRange(0, (text?.characters.count)!))
for match in matches {
let matchRange = match.rangeAt(0)
let titleDict: NSDictionary = [NSForegroundColorAttributeName: orangeColor]
attributedString.addAttributes(titleDict as! [String : AnyObject], range: matchRange)
}
self.attributedText = attributedString
self.selectedRange = selectedRange
self.isScrollEnabled = true
}
}
aber ich bin nicht sicher, wie jedes Wort mit Verzögerung von einer Sekunde
Ihre Idee einer Schleife ist auf der richtigen Spur. Versuch etwas. Aktualisieren Sie Ihre Frage mit einem verwandten Code, der zumindest einige grundlegende Versuche zeigt. Beschreiben Sie klar, wofür Sie Hilfe benötigen. – rmaddy
@maddy, ich habe meine Frage bearbeitet, danke, dass du darauf hingewiesen hast! – user3766930
Dieser Code markiert alle Wörter auf einmal aufgrund des regulären Ausdrucks, den Sie verwenden. Sie benötigen eine Möglichkeit, um eine Liste (Array) von Wörtern zu erstellen, die Sie markieren möchten, und dann durch dieses Array zu iterieren. Für jedes Wort finden Sie dann alle Übereinstimmungen dieses einen Wortes. – rmaddy