2016-02-04 5 views
0

Я пытался получить несколько диапазонов строки внутри строки. Чтобы изменить цвет этих строк.Получение нескольких диапазонов динамических строк внутри строки

Для изменения текста Цвет, который я использовал UILabel + FormattedText.h Категория.

Для например, в строке: - @ «@ привет @test тестирование #label»

Я хочу, чтобы эти подстроки будут показаны в красном цвете, которые смотрят с @ или #.

Теперь на выходе @hello @test #label будет красного цвета, и тестирование будет в нормальном цвете.

Любая помощь?

ответ

1

Вы можете достичь этого через что-то вроде этого. В конце «rangeArray» будет содержать диапазоны строк с «@» и «#» в качестве префикса, а «attrString» будет атрибутной строкой, которая преобразует эти строки в красный цвет текста.

 
    NSString * test = @"@hello @test testing #label"; 

    NSArray *array = [test componentsSeparatedByString:@" "]; 
    NSMutableArray *rangesArray = [NSMutableArray array]; 

    NSInteger prevStringLength = 0; 
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:test]; 

    for (NSString *str in array) { 
     if ([str hasPrefix:@"@"] || [str hasPrefix:@"#"]) { 
      [attrString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(prevStringLength, str.length)]; 
      [rangesArray addObject:[NSValue valueWithRange:NSMakeRange(prevStringLength, str.length)]]; 
     } 

     prevStringLength += (str.length + 1); 
    } 
+0

Благодаря poorva. Я сделал это с помощью NSScanner. Ниже вы можете увидеть ответ. –

0

Понял сделано с помощью метода ниже

+(void) setTextColor:(NSString *)stringToScan Label:(UILabel *)label CharacterToCheck:(NSString *)characterToCheck Color:(UIColor *)color 
{ 
    NSMutableArray *substrings = [NSMutableArray new]; 
    NSScanner *scanner = [NSScanner scannerWithString:stringToScan]; 
    [scanner scanUpToString:characterToCheck intoString:nil]; // Scan all characters before CharacterToCheck 
    while(![scanner isAtEnd]) 
    { 
     NSString *substring = nil; 
     [scanner scanString:characterToCheck intoString:nil]; // Scan the # character 
     if([scanner scanUpToString:@" " intoString:&substring]) 
     { 
      // If the space immediately followed the CharacterToCheck, this will be skipped 
      if([substring rangeOfString:characterToCheck].location == NSNotFound) 
      { 
       substring = [NSString stringWithFormat:@"%@%@",characterToCheck,substring]; 
      } 

     [substrings addObject:substring]; 
     } 
     [scanner scanUpToString:characterToCheck intoString:nil]; // Scan all characters before next CharacterToCheck 
    } 



    for(int i=0;i<[substrings count];i++) 
    { 
     NSString *str = [substrings objectAtIndex:i]; 

     NSRange range = [stringToScan rangeOfString:str]; 
     if(range.location != NSNotFound) 
     { 
      [label setTextColor:color range:NSMakeRange(range.location, range.length)]; 
     } 
    } 
} 
Смежные вопросы