Заменить текст UITextViews приписанной строкой
у меня естьUITextView
и когда пользователь вводит текст в него, я хочу отформатировать текст на лету. Что-то вроде подсветки синтаксиса ...
Для этого я хотел бы использоватьUITextView
...
Все работает нормально, ожидаю одну проблему: я беру текст из текстового представления и делаюNSAttributedString
из этого. Я делаю некоторые правки для этой приписанной строки и устанавливаю ее обратно какtextView.attributedText
.
Это происходит каждый раз, когда пользователь вводит. Поэтому я должен помнитьselectedTextRange
до редактирования вattributedText
и установите его позже, чтобы пользователь мог продолжать печатать в том месте, где он печатал раньше. Единственная проблема заключается в том, что, как только текст становится достаточно длинным, чтобы прокрутитьUITextView
Теперь начну прокручивать вверх, если я наберу медленно.
Вот пример кода:
- (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;
}
Есть ли решение без непосредственного использования CoreText? мне нравитсяUITextView
Возможность выбора текста и т. д.