Zastąp tekst UITextViews przypisanym łańcuchem
mamUITextView
a gdy użytkownik wprowadza do niego tekst, chcę sformatować tekst w locie. Coś w rodzaju podświetlania składni ...
Do tego chciałbym użyćUITextView
...
Wszystko działa dobrze spodziewaj się jednego problemu: biorę tekst z widoku tekstu i robięNSAttributedString
z tego. Wprowadzam kilka zmian do tego przypisanego ciągu i przywracam go jakotextView.attributedText
.
Dzieje się tak za każdym razem, gdy użytkownik wpisze. Muszę więc pamiętać oselectedTextRange
przed edycją doattributedText
i ustaw go później, aby użytkownik mógł kontynuować pisanie w miejscu, które wcześniej pisał. Jedynym problemem jest to, że gdy tekst jest wystarczająco długi, aby wymagać przewijania,UITextView
zacznie się przewijać do góry, jeśli będę pisać powoli.
Oto przykładowy kod:
- (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;
}
Czy istnieje rozwiązanie bez użycia CoreText bezpośrednio? LubięUITextView
możliwość wybrania tekstu i tak dalej ....