Ho uno UITextView
e quando l'utente inserisce del testo in esso, voglio formattare il testo al volo. Qualcosa come l'evidenziazione della sintassi ...Sostituisci testo UITextViews con stringa attribuita
Per questo mi piacerebbe utilizzare UITextView
...
tutto funziona bene aspettarsi un problema: prendo il testo dal punto di vista del testo e fa un NSAttributedString
da esso. Apporto alcune modifiche a questa stringa attribuita e la reimposta come textView.attributedText
.
Questo succede ogni volta che l'utente digita. Quindi devo ricordare lo selectedTextRange
prima della modifica allo attributedText
e reimpostarlo in seguito in modo che l'utente possa continuare a digitare nel punto in cui stava scrivendo prima. L'unico problema è che una volta che il testo è sufficientemente lungo da richiedere lo scorrimento, lo UITextView
inizierà ora a scorrere verso l'alto se scrivo lentamente.
Ecco alcuni esempi di codice:
- (void)formatTextInTextView:(UITextView *)textView
{
NSRange selectedRange = textView.selectedRange;
NSString *text = textView.text;
// This will give me an attributedString with the base text-style
NSMutableAttributedString *attributedString = [self attributedStringFromString:text];
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];
NSArray *matches = [regex matchesInString:text
options:0
range:NSMakeRange(0, text.length)];
for (NSTextCheckingResult *match in matches)
{
NSRange matchRange = [match rangeAtIndex:0];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:matchRange];
}
textView.attributedText = attributedString;
textView.selectedRange = selectedRange;
}
C'è qualche soluzione senza utilizzare direttamente CoreText? Mi piace l'abilità di UITextView
s per selezionare il testo e così via ....
@ NANNAV Grazie per i tuoi sforzi per migliorare SO modificando i post. Tuttavia, [non c'è davvero alcun motivo] (http://meta.stackexchange.com/q/158564/169503) per l'enfasi arbitraria arbitraria che sembri [a] (http://stackoverflow.com/review/suggested-edits/ 2242818) [introduce] (http://stackoverflow.com/review/suggested-edits/2247096) [in] (http://stackoverflow.com/review/suggested-edits/2248401) [varie] (http: // stackoverflow.com/review/suggested-edits/2248276) [post] (http://stackoverflow.com/review/suggested-edits/2247183). Introduce solo rumore e può effettivamente essere considerato attivamente dannoso. –