2016-01-01 5 views
0

Я знаю, что что-то вроде этого уже было задано, но я не нашел решения для своей проблемы.NSString находит регулярное выражение и заменяет его изображением (NSMutableAttributeString)

Итак, у меня есть NSString, который иногда включает в тексте имя изображения, как:

Lorem ipsum.... 
image.png 
... dolor sit elit lamet 

Я хотел бы поставить в этом пространстве изображение с именем «image.png» в моей NSMutableAttributedString ,

Это мой код, чтобы принести паросочетания

NSString *regEx = @"([a-z])+(?:([0-9])+){0,1}.png"; 
NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:regEx 
           options:NSRegularExpressionCaseInsensitive error:&error]; 
if(error != nil){ 
    NSLog(@"Error: %@",error); 
} else{ 
    [regex enumerateMatchesInString:myString options:0 range:NSMakeRange(0, [myString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){ 
     // your code to handle matches here 

     NSLog(@"found!"); 
    }]; 
} 

Как добавить изображение в NSMutableAttributedString, вызывая imageNamed функции для каждого найденного подстроки?

ответ

0

Видимо, я разрешил это. Внутри есть код для замены подстроки изображением в NSMutableAttributedString. Кроме того, я решил поставить перевернутую for на вдохе к предыдущему ответу на вопрос, аналогичный (но разной), как этот

NSMutableAttributedString *formattedText = myString.mutableAttributedString; 

// Look for image 
NSString *regEx = @"([a-z])+(?:([0-9])+){0,1}.png"; 
NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:regEx 
           options:NSRegularExpressionCaseInsensitive error:&error]; 
if(error != nil){ 
    NSLog(@"Error: %@",error); 
} else{ 
    NSArray *matches = [regex matchesInString:myString 
             options:kNilOptions 
             range:NSMakeRange(0, myString.length)]; 
    for (NSTextCheckingResult *result in [matches reverseObjectEnumerator]) 
    { 
     NSString *insideString = [myString substringWithRange:[result rangeAtIndex:0]]; 
     UIImage *image = [UIImage imageNamed:insideString]; 
     NSTextAttachment *imageAttachment = [NSTextAttachment new]; 
     imageAttachment.image = image; 
     NSAttributedString *replacementForTemplate = [NSAttributedString attributedStringWithAttachment:imageAttachment]; 
     [formattedText replaceCharactersInRange:result.range 
          withAttributedString:replacementForTemplate]; 

     NSLog(@"found! -> %@", insideString); 

    } 
} 

Вместо этого mutableAttributedString свойство принадлежит к NSString категории. Это его код

- (NSMutableAttributedString *)mutableAttributedString { 
    return [[NSMutableAttributedString alloc] initWithString:self]; 
}