Я использую NSMutableAttributedString для изменения текста в UITextView в качестве типов пользователей. Когда пользователь вводит «# HELLO #» или «# TEST #» или «# test #», эти строки должны быть красными (просто пример).Изменение цвета малых слов ('in') в UITextView с использованием NSMutableAttributedString
- (void)textViewDidChange:(UITextView *)textView
{
NSString *textViewText = textView.text;
NSMutableAttributedString * string = [[NSMutableAttributedString alloc]initWithString:textViewText];
NSString *space = @" ";
NSArray *words =[textView.text componentsSeparatedByString:space];
for (NSString *word in words) {
if ([word isEqualToString:@"#HELLO#"] || [word isEqualToString:@"#TEST#"] || [word isEqualToString:@"#test#"]) {
NSRange range=[textView.text rangeOfString:word];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
}
else{
NSRange range=[textView.text rangeOfString:word];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:range];
}
}
[string addAttribute:NSFontAttributeName
value:[UIFont fontWithName:@"HelveticaNeue-Light" size:20.0]
range:NSMakeRange(0, [textView.text length])];
[textView setAttributedText:string];
}
Это работает почти для каждого слова, кроме 'in'. Когда я печатаю это, «in» является черным, а не белым ([UIColor whiteColor]
). Если я типа «T», «т» в «# тест #» побелеет.
Я действительно путают, кто-нибудь может мне помочь? Я думал, что else
часть должна поймать этих строк. Спасибо.
Несколько вещей, которые ma y быть проблемой после: 'rangeOfString:' возвращает только первое вхождение. Поэтому, если у вас есть # # HELLO # # HELLO #, то только первый будет окрашен. Или, например, '# HELLO # output output" (только первый выход будет белым). Кроме того, в начале было бы интересно использовать 'NSString * textViewText = textView.attributedText;' каким-то образом. Не помню, если по умолчанию , если у вас есть 'NSAttributedString', он сохранит свое свойство' string' в свой 'text'. – Larme