2016-10-22 6 views
1

я работаю над проектом, в котором я взял texview и его метод делегата нижеКак найти Mutiple слова в TextView для изменения цвета его

-(void)textViewDidChange:(UITextView *)textView 
{ 
    NSMutableAttributedString *attstr = [[NSMutableAttributedString alloc]initWithString:textView.text]; 
    NSUInteger characterCount = [attstr length]; 
    NSString *str = @"football"; 
    NSUInteger searchlength = [str length]; 
    NSRange range1 = NSMakeRange(0, attstr.length); 
    while (range1.location != NSNotFound) { 
     range1 =[attstr.string rangeOfString:str options:0 range:range1]; 
     if (range1.location !=NSNotFound) { 
      [attstr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(range1.location, searchlength)]; 
      [attstr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20.0] range:range1]; 
      range1 = NSMakeRange(range1.location + range1.length, characterCount -(range1.location + range1.length)); 
      textView.attributedText = attstr; 
     } 
    } 
} 

Сейчас в этом методе, я нахожу ключевое слово «футбол» и измените его цвет на красный цвет. Здесь я ищу одну строку. Итак, что мне делать для проверки нескольких строк, таких как массив

Моя проблема заключается в том, как я могу найти несколько строк за раз в текстовый текст.

Пожалуйста, помогите мне с этим
Спасибо

+2

Вы можете обернуть свой код с 'for' проходным элементы в массиве слов, которые нужно заменить. Возможно, не лучший алгоритм, хотя :) – alexburtnik

ответ

0

я достиг этой вещи, как этот

-(void)textViewDidChange:(UITextView *)textView 
{ 
    NSMutableAttributedString *attstr = [[NSMutableAttributedString alloc]initWithString:textView.text]; 
    NSUInteger characterCount = [attstr length]; 
    NSArray *arr = [[NSArray alloc]initWithObjects:@"football",@"player",nil]; 

    for (int i=0; i<arr.count; i++) { 

    NSUInteger searchlength = [[NSString stringWithFormat:@"%@",[arr objectAtIndex:i]] length]; 
    NSRange range1 = NSMakeRange(0, attstr.length); 

    while (range1.location != NSNotFound) { 
     range1 =[attstr.string rangeOfString:[NSString stringWithFormat:@"%@",[arr objectAtIndex:i]] options:0 range:range1]; 
     if (range1.location !=NSNotFound) { 
      [attstr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(range1.location, searchlength)]; 
      [attstr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20.0] range:range1]; 
      range1 = NSMakeRange(range1.location + range1.length, characterCount -(range1.location + range1.length)); 
      textView.attributedText = attstr; 
     } 
    } 
} 
+0

Если есть какой-либо другой метод, который я могу использовать, пожалуйста, сделайте мне одолжение –

0
NSArray *arr = @[@"football",@"player",@"match"]; 

- (void)textViewDidChange:(UITextView *)textView 
{ 
    NSString *text = textView.text; 

    NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:text];   

    NSRange range = NSMakeRange(0 ,text.length); 
    NSRegularExpression *regex; 
    for (int i=0; i<arr.count; i++) { 
     NSString *obj = [arr objectAtIndex:i]; 
     regex = [NSRegularExpression regularExpressionWithPattern:obj options:kNilOptions error:nil];// Case sensitive 

     [regex enumerateMatchesInString:text options:kNilOptions range:range usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 

      NSRange subStringRange = [result rangeAtIndex:0]; 
      [mutableAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:subStringRange]; 
     }]; 

     txt_out.attributedText = mutableAttributedString; 
    } 
} 
+0

хороший ответ ............... –

+0

Я не хочу этого, я его уже достигал. Я хочу изменить цвет нескольких строк в текстовом виде, например, у меня есть массив «[футбол, игрок]», поэтому, когда я печатаю футбол или плеер, его текст меняется на красный цвет. –

+0

@BhavinRamani Я уже решил это как мой ниже ответ. Но спасибо, я ценю это –

Смежные вопросы