Заменить текст 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Возможность выбора текста и т. д.

Ответы на вопрос(4)

Ваш ответ на вопрос