Tło
Więc z iOS 6 UITextView można wziąć attributedString, która może być przydatna dla podświetlanie składni.UITextView attributedText i podświetlanie składni
Robię kilka wzorów regex w -textView:shouldChangeTextInRange:replacementText:
i często potrzebuję zmienić kolor już wpisanego słowa. Nie widzę innych opcji niż resetowanie atrybutuTekst, 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;
}
ten biegnie okayish na symulatorze, ale na iPada 3 każdy -setAttributedText
trwa kilka setek milisekund.
Złożyłem błąd do Apple, z prośbą o możliwość mutacji atrybutuText. Został oznaczony jako duplikat, więc nie widzę, co o tym mówią.
Pytanie
Im bardziej konkretne pytanie: Jak mogę zmienić kolor niektórych zakresach w UITextView, z dużym tekstem wielokolorowe, z dość dobrych wyników to zrobić w każdej shouldReplaceText...
?
Im bardziej szeroka pytanie: Jak to zrobić podświetlanie składni z UITextView w iOS 6?
Ja również próbuje zaznaczyć tekst jest mówione w mojej aplikacji głośników internetowej. Pomyślałem, że będę mógł to zrobić z łatwością z iOS6, ale nie mogłem znaleźć api, aby dynamicznie zmieniać kolor napisów w pewnym zakresie. Ustawianie pełnego przypisywanego tekstu za każdym razem zajmuje zbyt dużo czasu. –
Złożyłem również zgłoszenie błędu do Apple. Potrzebujemy czegoś podobnego do tej metody. "textView_.attributedText addAttribute: wartość: zakres czcionek:" –
Tak, ale założę się, że nigdy nie zobaczymy zmiennej wersji atrybutuText, ponieważ tekstView musi wiedzieć, kiedy ciąg znaków zostanie zmieniony. Mam nadzieję, że albo inteligentniejszy seter, albo przypisana wersja UITextInput '-replaceRange: withText:' –