UITextView attributText i podświetlanie składni

tło

Tak więc w systemie iOS 6 UITextView może przyjąć atrybut attributString, który może być przydatny do podświetlania składni.

Robię kilka wzorców wyrażeń regularnych-textView:shouldChangeTextInRange:replacementText: i często muszę zmienić kolor już wpisanego słowa. Nie widzę żadnych innych opcji niż zresetowanie attributText, co wymaga czasu.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    //A context will allow us to not call -attributedText on the textView, which is slow.
    //Keep context up to date
    [self.context replaceCharactersInRange:range withAttributedString:[[NSAttributedString alloc] initWithString:text attributes:self.textView.typingAttributes]];

    // […]

    self.textView.scrollEnabled = FALSE;

    [self.context setAttributes:self.defaultStyle range:NSMakeRange(0, self.context.length)];
    [self refresh]; //Runs regex-patterns in the context
    textView.attributedText = self.context;

    self.textView.selectedRange = NSMakeRange(range.location + text.length, 0);
    self.textView.scrollEnabled = TRUE;

    return FALSE;
}

To działa dobrze na symulatorze, ale na iPadzie 3 każdy-setAttributedText trwa kilkaset milisekund.

Zgłosiłem błąd do Apple, z prośbą o możliwość zmutowania attributText. Został oznaczony jako duplikat, więc nie widzę, co o tym mówią.

Pytanie

Bardziej szczegółowe pytanie: Jak mogę zmienić kolor pewnych zakresów w UITextView, z dużym wielokolorowym tekstem, z wystarczającą wydajnością, aby zrobić to w każdymshouldReplaceText...?

Bardziej ogólne pytanie: Jak zrobić podświetlanie składni z UITextView w iOS 6?

questionAnswers(2)

yourAnswerToTheQuestion